Assignment
- What I'm covering:
- General control flow
- fork()
- execlp()
- Parameters
- Makefiles
- Additional Questions
General Control Flow/fork()
int main(int argc,char** argv){
.....
for(i = 0;i < 4;i++){
int ret_pid = fork();
if ( ret_pid < 0 ) exit(1); //this means fork() failed
else if ( ret_pid == 0 ) ! //this is the child
else ... //this is the parent (Controller)
}
return 0;
}
execlp()
- This function call has a lot of gotchas that look very confusing at first glance.
- The first argument to execlp is the string with the file name that will be executed...and so is the second.
- Think about your own program being called from the command-line ( > ./a.out arg1 arg2 ). In this case, the value of argv[0] in the program is "a.out".
Same thing applies when using exec, you just have to be explicit about it.
More execlp() and parameters
- The rest of the parameters to execlp are strings containing the rest of the arguments, in our case, the numbers that the calculator will be operating on.
- These will be passed to Controller as arguments, and from there, they will be passed to Calculator.
- No matter what, the last argument to execlp MUST be a null-terminator (NULL or (char*) 0).
This is because the argument list must be null-terminated, just like any other string.
Makefiles
- This assignment requires that TWO executables be created: the Controller and the Calculator.
- Because of how Eclipse generates its makefiles, if you try to do this in a single project, Eclipse will whine. I recommend doing your coding in a normal text editor (gedit, emacs, vi, bluefish, etc.), and writing your own makefile.
- There are plenty of makefile tutorials online; but this project (and the next one) will not require a particularly complex makefile.
Makefile example
- Here's the general format of a makefile entry:
[target] : [dependency1] ! [dependencyn] [command to execute]
- In this example, when you call make target, the make program checks if any of the dependencies of target are out of date.
- If one or more of them is out of date, the command to execute is run.