HPUX execle[2]






 exec(2)                                                             exec(2)





 NAME
      execl, execv, execle, execve, execlp, execvp - execute a file

 SYNOPSIS
      #include <unistd.h>

      extern char **environ;

      int execl(
           const char *path,
           const char *arg0, ...
           /* const char *arg1,
              ...,
              const char *argn,
              (char *)0 */
      );

      int execv(const char *path, char * const argv[]);

      int execle(
           const char *path,
           const char *arg0, ...
           /* const char *arg1,
              ...,
              const char *argn,
              (char *)0,
              char * const envp[] */
      );

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

      int execlp(
           const char *file,
           const char *arg0, ...
           /* const char *arg1,
              ... ,
              const char *argn,
              (char *)0 */
      );

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

 DESCRIPTION
      exec(), in all its forms, loads a program from an ordinary, executable
      file onto the current process, replacing the current program.  The
      path or file argument refers to either an executable object file or a
      file of data for an interpreter.  In this case, the file of data is
      also called a script file.

      An executable object file consists of a header (see a.out(4)), text
      segment, and data segment.  The data segment contains an initialized



 Hewlett-Packard Company            - 1 -     HP-UX Release 9.0: August 1992






 exec(2)                                                             exec(2)





      portion and an uninitialized portion (bss).  For execlp() and execvp()
      the shell (/bin/sh) can be loaded to interpret a script instead.  A
      successful call to exec() does not return because the new program
      overwrites the calling program.

      When a C program is executed, it is called as follows:

           main (argc, argv, envp)
           int argc;
           char **argv, **envp;

      where argc is the argument count and argv is the address of an array
      of character pointers to the arguments themselves.  As indicated, argc
      usually has a value of at least one, and the first member of the array
      points to a string containing the name of the file.  (Exit conditions
      from main are discussed in exit(2).)

      path points to a path name that identifies the executable file
      containing the new program.

      file (in execlp() or execvp()) points to a file name identifying the
      executable file containing the new program.  The path prefix for this
      file is obtained by searching the directories passed as the
      environment line PATH = (see environ(5)).  The environment is supplied
      by the shell (see sh(1)).  If file does not have an executable magic
      number (magic(4)), it is passed to /bin/sh as a shell script.

      arg0, arg1, ..., argn are pointers to null-terminated character
      strings.  These strings constitute the argument list available to the
      new program.  By convention, at least arg0 must be present and point
      to a string identical to path or path's last component.

      argv is an array of character pointers to null-terminated strings.
      These strings constitute the argument list available to the new
      program.  By convention, argv must have at least one member, and must
      point to a string that is identical to path or path's last component.
      argv is terminated by a null pointer.

      envp is an array of character pointers to null-terminated strings.
      These strings constitute the environment in which the new program
      runs.  envp is terminated by a null pointer.  For exec() and execv(),
      the C run-time start-off routine places a pointer to the environment
      of the calling program in the global cell:

           extern char **environ;

      and it is used to pass the environment of the calling program to the
      new program.

      Open file descriptors remain open, except for those whose close-on-
      exec flag is set (see fcntl(2)).  The file offset, access mode, and



 Hewlett-Packard Company            - 2 -     HP-UX Release 9.0: August 1992






 exec(2)                                                             exec(2)





      status flags of open file descriptors are unchanged.

      Note that normal executable files are open only briefly when they
      start execution.  Other executable file types can be kept open for a
      long time, or even indefinitely under some circumstances.

      The processing of signals by the process is unchanged by exec(),
      except that signals caught by the process are set to their default
      value (see signal(2)).

      If the set-user-ID mode bit of the executable file pointed to by path
      or file is set (see chmod(2)), exec() sets the effective-user-ID of
      the new process to the user ID of the executable file.  Similarly, if
      the set-group-ID mode bit of the executable file is set, the
      effective-group-ID of the process is set to the group ID of the
      executable file.  The real-user-ID and real-group-ID of the process
      are unchanged.  Note that the set-user(group)-ID function does not
      apply to scripts; thus, if execlp() or execvp() executes a script, the
      set-user(group)-ID bits are ignored, even if they are set.

      The saved-user-ID and saved-group-ID of the process are always set to
      the effective-user-ID and effective-group-ID, respectively, of the
      process at the end of the exec, whether or not set-user(group)- ID is
      in effect.

      The shared memory segments attached to the calling program are not
      attached to the new program (see shmop(2)).

      Text and data segment memory locks are not passed on to the new
      program (see plock(2)).

      Profiling is disabled for the new process; see profil(2).

      The process also retains the following attributes:

           o  current working directory
           o  file creation mode mask (see umask(2))
           o  file locks (see fcntl(2)), except for files closed-on-exec
           o  file size limit (see ulimit(2))
           o  interval timers (see getitimer(2))
           o  nice value (see nice(2))
           o  nice value (see parent process ID
           o  pending signals
           o  process ID
           o  process group ID
           o  real user ID
           o  real group ID
           o  real-time priority (see rtprio(2))
           o  root directory (see chroot(2))
           o  semadj values (see semop(2))




 Hewlett-Packard Company            - 3 -     HP-UX Release 9.0: August 1992






 exec(2)                                                             exec(2)





           o  session membership
           o  signal mask (see sigvector(2))
           o  supplementary group IDs
           o  time left until an alarm clock signal (see alarm(2))
           o  trace flag (see ptrace(2) PT_SETTRC request)
           o  tms_utime, tms_stime, tms_cutime, and tms_cstime (see
              times(2))

      The initial line of a script file must begin with #! as the first two
      bytes, followed by zero or more spaces, followed by interpreter or
      interpreter argument.  One or more spaces or tabs must separate
      interpreter and argument.  The first line should end with either a
      new-line or null character.

           #! interpreter
           #! interpreter argument

      When the script file is executed, the system executes the specified
      interpreter as an executable object file.  Even in the case of
      execlp() or execvp(), no path searching is done of the interpreter
      name.

      The argument is anything that follows the interpreter and tabs or
      spaces.  If an argument is given, it is passed to the interpreter as
      argv[1], and the name of the script file is passed as argv[2].
      Otherwise, the name of the script file is passed as argv[1].  The
      argv[0] is passed as specified in the exec() call, unless either argv
      or argv[0] is null as specified, in which case a pointer to a null
      string is passed as argv[0].  All other arguments specified in the
      exec() call are passed following the name of the script file (that is,
      beginning at argv[3] if there is an argument; otherwise at argv[2]).

      If the initial line of the script file exceeds a system-defined
      maximum number of characters, exec() fails.  The minimum value for
      this limit is 32.

      Set-user-ID and set-group-ID bits are honored for the script but not
      for the interpreter.

 RETURN VALUE
      If exec() returns to the calling program, an error has occurred; the
      return value is -1 and errno is set to indicate the error.

 ERRORS
      exec() fails and returns to the calling program if one or more of the
      following is true:

      [E2BIG]        The number of bytes in the new program's argument list
                     is greater than the system-imposed limit.  This limit
                     is at least 5120 bytes on HP-UX systems.




 Hewlett-Packard Company            - 4 -     HP-UX Release 9.0: August 1992






 exec(2)                                                             exec(2)





      [EACCES]       Read permission is denied for the executable file or
                     interpreter, and trace flag (see ptrace(2) request
                     PT_SETTRC) of the process is set.

      [EACCES]       Search permission is denied for a directory listed in
                     the executable file's or the interpreter's path prefix.

      [EACCES]       The executable file or the interpreter is not an
                     ordinary file.

      [EACCES]       The file described by path or file is not executable.
                     The super-user cannot execute a file unless at least
                     one access permission bit or entry in its access
                     control list has an execute bit set.

      [EFAULT]       path, argv, or envp point to an illegal address.  The
                     reliable detection of this error is implementation
                     dependent.

      [EFAULT]       The executable file is shorter than indicated by the
                     size values in its header, or is otherwise
                     inconsistent.  The reliable detection of this error is
                     implementation dependent.

      [EINVAL]       The executable file is incompatible with the
                     architecture on which the exec() has been performed,
                     and is presumed to be for a different architecture.  It
                     is not guaranteed that every architecture's executable
                     files will be recognized.

      [ELOOP]        Too many symbolic links are encountered in translating
                     the path name.

      [ENAMETOOLONG] The executable file's path name or the interpreter's
                     path name exceeds PATH_MAX bytes, or the length of a
                     component of the path name exceeds NAME_MAX bytes while
                     _POSIX_NO_TRUNC is in effect.

      [ENOENT]       path is null.

      [ENOENT]       One or more components of the executable file's path
                     name or the interpreter's path name does not exist.

      [ENOEXEC]      The exec() is not an execlp() or execvp(), and the
                     executable file has the appropriate access permission,
                     but there is neither a valid magic number nor the
                     characters #! as the first two bytes of its initial
                     line.

      [ENOEXEC]      The number of bytes in the initial line of a script
                     file exceeds the system's maximum.



 Hewlett-Packard Company            - 5 -     HP-UX Release 9.0: August 1992






 exec(2)                                                             exec(2)





      [ENOMEM]       The new process requires more memory than is available
                     or allowed by the system-imposed maximum.

      [ENOTDIR]      A component of the executable file's path prefix or the
                     interpreter's path prefix is not a directory.

      [ETXTBSY]      The executable file is currently open for writing.

 WARNINGS
    Access Control Lists
      Access control list descriptions in this entry apply only to standard
      HP-UX operating systems.  If HP-UX BLS software has been installed,
      access control lists are handled differently.  Refer to HP-UX BLS
      documentation for information about access control lists in the HP-UX
      BLS environment.

 DEPENDENCIES
      Series 700/800
           Unsharable executable files (EXEC_MAGIC magic number produced via
           the -N option of ld(1)) are not supported.

 SEE ALSO
      sh(1), alarm(2), exit(2), fork(2), nice(2), ptrace(2), semop(2),
      signal(2), times(2), ulimit(2), umask(2), a.out(4), acl(5),
      environ(5), signal(5).

 STANDARDS CONFORMANCE
      environ: AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

      execl(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

      execle(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

      execlp(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

      execv(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

      execve(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1

      execvp(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1














 Hewlett-Packard Company            - 6 -     HP-UX Release 9.0: August 1992