Date: Fri, 20 Dec 2002 10:51:43 +0100 (MET) From: Paul Everlund <tdv94ped@cs.umu.se> To: Aaron Burke <aburke@nullplusone.com> Cc: freebsd-questions@freebsd.org Subject: RE: Problems with a C application that changes users and run 'screen -x' Message-ID: <Pine.GSO.4.44.0212201041270.19542-100000@kvist.cs.umu.se> In-Reply-To: <NGBBLCIHCLNJAIGIFFHJIEAPCPAA.aburke@nullplusone.com>
next in thread | previous in thread | raw e-mail | index | archive | help
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 majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.GSO.4.44.0212201041270.19542-100000>
