pxfexecv(3F)
PXFEXECV, PXFEXECVE, PXFEXECVP - Executes a new process image file
As shipped in IRIX 6.5.19. Last changed in IRIX 6.5.19.
NAME PXFEXECV, PXFEXECVE, PXFEXECVP - Executes a new process image file SYNOPSIS SUBROUTINE PXFEXECV (path, lenpath, argv, lenargv, iargc, ierror) INTEGER lenpath, lenargv(0:iargc-1), iargc, ierror CHARACTER*n path, argv(0:iargc-1) SUBROUTINE PXFEXECVE (path, lenpath, argv, lenargv, iargc, env, lenenv, ienvc, ierror) INTEGER lenpath, lenargv(0:iargc-1), iargc, lenargv, ienvc, ierror CHARACTER*n path, argv(0:iargc-1) env(ienvc) SUBROUTINE PXFEXECVP (file, lenfile, argv, lenargv, iargc, ierror) INTEGER lenfile, lenargv(0:iargc-1), iargc, ierror CHARACTER*n file, argv(0:iargc-1) DESCRIPTION This routine is in libfortran.so which is linked by default when compiling programs with the MIPSpro 7 Fortran 90 compiler or when compiling programs with the -craylibs option to the MIPSpro F77 compiler. The PXFEXECV routine uses the execv(2) system call to replace the current process image with a new process image. The PXFEXECVE routine uses the execve(2) system call to replace the current process image with a new process image. The environment variables are not inherited from the calling process image. The environment variables for the new process image are specified by the env argument. The PXFEXECVP routine uses the execvp(2) system call to replace the current process image with a new process image. All arguments must be of default kind unless documented otherwise. On IRIX systems, the default kind is KIND=4. The following is a list of arguments for these routines: path An input character variable or array element containing the pathname of the new process image file. lenpath An input integer variable for the length of path. If lenpath is zero, trailing blanks are removed. file An input character variable or array element containing the file of the new process image file. If file contains a slash character, file will be used as the pathname for the new process image file. Otherwise, the directories listed in the PATH environment variable are searched using each directory in path as a pathname prefix for file. lenfile An input integer variable for the length of file. If lenfile is zero, trailing blanks are removed. argv An input array of character strings. argv contains the arguments to be passed to the new process image. lenargv An input array of integers. Each element in lenargv contains the length of the corresponding character string in argv. If an element in lenargv is zero, the corresponding element in argv has all trailing blanks stripped. iargc An input integer variable. iargc contains the number of arguments to pass to the new process image. env An input array of character strings. env contains the environment variables for the new process image. lenenv An input array of integers. Each element in lenenv contains the length of the corresponding character string in env. If an element in lenenv is zero, the corresponding element in env will have all trailing blanks stripped. ienvc An input integer variable. ienvc contains the number of environment variables for the new process image. ierror An output integer variable that contains zero if the routine was successful or nonzero if the routine was not successful. The following values may be returned: EACCES If the new process file is not a regular file, the new process image file mode denies execution permission, or search permission is denied for a directory listed in the new process image file's path prefix. ENOENT If one or more components of the new process image file's path name do not exist. ENOEXEC If the new process image file has the appropriate access permission but an invalid magic number in its header. ENOMEM If the memory needed to create structures used by the routine could not be allocated. EINVAL If lenpath < 0 or lenpath > LEN(path) or any element of lenargv is less than zero or greater than the length of the corresponding element in argv. IRIX 6.2 only errors: E2BIG If the number of bytes in the new process's argument list is greater than the system-imposed limit ARG_MAX (see sysconf(2), intro(2), and limits.h). The argument list limit is the sum of the size of the argument list plus the size of the environment's exported shell variables. E2BIG If the number of bytes in the first line of an interpreter file is greater than 256 bytes. EAGAIN If there is not enough memory. ELIBACC If the required shared library does not have execute permission. ELIBEXEC If path points to a shared library. ELIBMAX If the required number of shared libraries exceeds the system imposed maximum SHLIB_MAX (see intro(2)). ELOOP If too many symbolic links were encountered in translating path. ENAMETOOLONG If the length of path exceeds PATH_MAX found in <limits.h>, or the length of a path component exceeds NAME_MAX found in <limits.h> while POSIX_NO_TRUNC is in effect. ENOEXEC If the executable process image file has badly formed header information or the requested virtual addresses are not available. ENOMEM If the new process image requires more virtual space than is allowed either by the system-imposed maximum or the process imposed maximum PROCSIZE_MAX (see getrlimit(2) and intro(2)). EPERM If a non-superuser tries to execute a setuid file that belongs to some other user and the file system in which the file resides has been mounted with the nosuid option (see fstab(4)), or if a non-superuser attempts to execute a setuid or setgid shell script with a UID or GID that is different than the user's effective UID/GID, and the configured value for no-suid-shells is non-zero (the default) (see intro(2) and lboot(1M)). NOTES The PXF_DEFINITIONS module can be used by Fortran 90 users to enable caller-callee interface checking. EXAMPLES PXFEXECV example: In this example, the program forks and the child calls PXFEXECV to execute the /bin/grep process image file. The parent process waits for the child to finish executing and then forks again. The child from the second fork also calls PXFEXECV to execute the /bin/grep process image file. The parent then waits for the child to finish executing. program test integer ipid, ierror, lenpath, lenargv(3), iargc, iretpid integer istat character*30 path, argv(3) path = '/bin/grep' lenpath = 0 iargc = 3 argv(1) = 'grep' lenargv(1) = 0 argv(2) = 'root' lenargv(2) = 0 argv(3) = '/etc/passwd' lenargv(3) = 0 CALL PXFFORK(ipid,ierror) if (ierror .ne. 0) then print *,'FAILED: PXFFORK call with error = ',ierror else if (ipid .eq. 0) then print *,'CHILD1: execing grep' CALL PXFEXECV(path, lenpath, argv, lenargv, iargc, ierror) print *,'FAILED: PXFEXEC call with error = ',ierror stop else print *,'PARENT: waiting for CHILD1' CALL PXFWAIT(istat,iretpid,ierror) print *,'PARENT: CHILD1 finished. Forking off CHILD2' CALL PXFFORK(ipid, ierror) if (ipid .eq. 0) then print *,'CHILD2: execing grep' CALL PXFEXECV(path, lenpath, argv, lenargv, iargc, ierror) print *,'FAILED PXFEXEC call with error = ',ierror stop else print *,'PARENT: waiting for CHILD2' CALL PXFWAIT(istat,iretpid,ierror) print *,'PARENT: CHILD2 finished.' print *,'PASSED: PXFEXECV normal test' endif endif endif end PXFEXECVE example: In this example, the program forks and the child calls PXFEXECVE to execute the /bin/grep process image file. The parent process waits for the child to finish executing and then forks again. The child from the second fork also calls PXFEXECVE to execute the /bin/grep process image file. The parent then waits for the child to finish executing. integer ipid, ierror, lenpath, lenargv(3), iargc, iretpid integer istat, errorcondition, lenenv(3), ienvc character*30 path, argv(3) character*30 env(3) path = '/bin/grep' lenpath = 0 iargc = 3 argv(1) = 'grep' lenargv(1) = 0 argv(2) = 'root' lenargv(2) = 0 argv(3) = '/etc/passwd' lenargv(3) = 0 ienvc = 3 env(1) = 'TERM=vt100' lenenv(1) = 0 env(2) = 'SHELL=/bin/csh' lenenv(2) = 0 env(3) = 'DISPLAY=:0.0' lenenv(3) = 0 CALL PXFFORK(ipid,ierror) if (ierror .ne. 0) then print *,'FAILED: PXFFORK call with error = ',ierror else if (ipid .eq. 0) then print *,'CHILD1: execing grep' CALL PXFEXECV(path, lenpath, argv, lenargv, iargc, ierror) print *,'FAILED: PXFEXEC call with error = ',ierror stop else print *,'PARENT: waiting for CHILD1' CALL PXFWAIT(istat,iretpid,ierror) print *,'PARENT: CHILD1 finished. Forking off CHILD2' CALL PXFFORK(ipid, ierror) if (ipid .eq. 0) then print *,'CHILD2: execing grep' CALL PXFEXECV(path, lenpath, argv, lenargv, iargc, ierror) print *,'FAILED PXFEXEC call with error = ',ierror stop else print *,'PARENT: waiting for CHILD2' CALL PXFWAIT(istat,iretpid,ierror) print *,'PARENT: CHILD2 finished.' print *,'PASSED: PXFEXECVP normal test' endif endif endif end PXFEXECVP example: In this example, the program forks and the child calls PXFEXECVP to execute the grep process image file. The parent process waits for the child to finish executing and then forks again. The child from the second fork also calls PXFEXECVP to execute the grep process image file. The parent then waits for the child to finish executing. program test integer ipid, ierror, lenfile, lenargv(3), iargc, iretpid integer istat character*30 file, argv(3) file = 'grep' lenfile = 0 iargc = 3 argv(1) = 'grep' lenargv(1) = 0 argv(2) = 'root' lenargv(2) = 0 argv(3) = '/etc/passwd' lenargv(3) = 0 CALL PXFFORK(ipid,ierror) if (ierror .ne. 0) then print *,'FAILED: PXFFORK call with error = ',ierror else if (ipid .eq. 0) then print *,'CHILD1: execing grep' CALL PXFEXECVP(file, lenfile, argv, lenargv, iargc, ierror) print *,'FAILED: PXFEXEC call with error = ',ierror stop else print *,'PARENT: waiting for CHILD1' CALL PXFWAIT(istat,iretpid,ierror) print *,'PARENT: CHILD1 finished. Forking off CHILD2' CALL PXFFORK(ipid, ierror) if (ipid .eq. 0) then print *,'CHILD2: execing grep' CALL PXFEXECVP(file, lenfile, argv, lenargv, iargc, ierror) print *,'FAILED PXFEXEC call with error = ',ierror stop else print *,'PARENT: waiting for CHILD2' CALL PXFWAIT(istat,iretpid,ierror) print *,'PARENT: CHILD2 finished.' print *,'PASSED: PXFEXECVP normal test' endif endif endif end SEE ALSO execv(2)