Chapter Contents

Previous

Next
execve

execve



Overlay Calling Process and Run New Program

Portability: POSIX.1 conforming, UNIX compatible


SYNOPSIS
DESCRIPTION
RETURN VALUE
EXAMPLE
SEE ALSO


SYNOPSIS

#include <unistd.h>

int execve(const char *file, char *const argv[], char *const envp[]);


DESCRIPTION

Like all of the exec functions, execve replaces the calling process image with a new process image. This has the effect of running a new program with the process ID of the calling process. Note that a new process is not started; the new process image simply overlays the original process image. The execve function is most commonly used to overlay a process image that has been created by a call to the fork function.

file
is the filename of the file that contains the executable image of the new process.

argv
is a pointer to an array of pointers to null-terminated character strings. A NULL pointer is used to mark the end of the array. Each character string pointed to by the array is used to pass an argument to the new process image. The first argument, argv[0] , is required and must contain the name of the executable file for the new process image.

envp
is a pointer to an array of pointers to null-terminated character strings. A NULL pointer is used to mark the end of the array. Each character string pointed to by the array is used to pass an environment variable to the new process image.


RETURN VALUE

A successful call to execve does not have a return value because the new process image overlays the calling process image. However, a -1 is returned if the call to execve is unsuccessful.


EXAMPLE

The following example illustrates the use of execve to execute the ls shell command. Notice that the STEPLIB environment variable is set for the new process.

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

main()

{
   pid_t pid;
   char *const parmList[] = 
   {"/bin/ls", "-l", "/u/userid/dirname", NULL\};
   char *const envParms[2] = {"STEPLIB=SASC.V6.LINKLIB", NULL\};

   if ((pid = fork()) ==-1)
      perror("fork error");
   else if (pid == 0) {
      execve("/u/userid/bin/newShell", parmList, envParms);
      printf("Return not expected. Must be an execve error.\\n");
   }
}


SEE ALSO

execv , execvp


Chapter Contents

Previous

Next

Top of Page

Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.