From owner-freebsd-questions Fri Dec 20 1:52: 1 2002 Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 41E5737B401 for ; Fri, 20 Dec 2002 01:51:59 -0800 (PST) Received: from grillolja.cs.umu.se (grillolja.cs.umu.se [130.239.40.17]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3C1A943EE6 for ; Fri, 20 Dec 2002 01:51:58 -0800 (PST) (envelope-from tdv94ped@cs.umu.se) Received: from localhost (localhost [127.0.0.1]) by amavisd-new (Postfix) with ESMTP id C0D9F9FD0; Fri, 20 Dec 2002 10:51:46 +0100 (MET) Received: from kvist.cs.umu.se (kvist.cs.umu.se [130.239.40.192]) (using TLSv1 with cipher EDH-RSA-DES-CBC3-SHA (168/168 bits)) (No client certificate requested) by grillolja.cs.umu.se (Postfix) with ESMTP id F02FF9FA5; Fri, 20 Dec 2002 10:51:43 +0100 (MET) Date: Fri, 20 Dec 2002 10:51:43 +0100 (MET) From: Paul Everlund To: Aaron Burke Cc: freebsd-questions@freebsd.org Subject: RE: Problems with a C application that changes users and run 'screen -x' In-Reply-To: Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Virus-Scanned: by amavisd-new amavisd-new-20020630 Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG 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 ? > > Allthough I am not familiar with unistd.h at all, I did do > a little bit of expermentation. > > Here is my new code: > > #include > #include > #include > > 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