On Fri, 20 Dec 2002, Aaron Burke wrote: > > 3. Avoid using system() which I vaguely recall being described with a > > lot of bad words in various places and use fork(), exec(), _exit(), > > waitpid() and exit() instead. > > How would I do this with exec. According to the man page for exec > I have only a few options. > int execl(const char *path, const char *arg, ...); > int execlp(const char *file, const char *arg, ...); > int execle(const char *path, const char *arg, ...); > int exect(const char *path, char *const argv[], > char *const envp[]); > int execv(const char *path, char *const argv[]); > int execvp(const char *file, char *const argv[]); > > Can you point me to the right documentation to learn about > the exec functions provided by <unistd.h>? > > Allthough I am not familiar with unistd.h at all, I did do > a little bit of expermentation. > > Here is my new code: > > #include <stdio.h> > #include <stdlib.h> > #include <unistd.h> > > int main(int argc, char* pszArgs[]) > { > int result, result2; > result= execlp("/usr/bin/su", "ppp", "-m"); > result2=execlp("/usr/local/bin/screen", "-x"); > return result + result2; > } > bash-2.05$ g++ run-ppp.c > bash-2.05$ ./a.out > bash-2.05$ > > I am a little supprised that nothing appeared to have happened. > Perhaps I am running these improperly. Am I using the correct > exec command? Can you demonstrate how this should work? > What else could execlp(args) needs to say? > > > > > - Giorgos > > > > Thanks for your time.
I think execlp is writing over your current process. So first your process is exchanged with ppp, then ppp is exchanged with screen. You have to make a copy of your current process, a.out, by using fork, and then exchange the process image in this copy using execlp. I suggest you read more about those functions Giorgos mentioned: fork, execlp, waitpid, and exit. Best regards, Paul To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-questions" in the body of the message