    EXEC(II)                      8/5/73                     EXEC(II)

    NAME
         exec, execl, execv  -  execute a file

    SYNOPSIS
         (exec = 11.)
         sys exec; name; args
         ...
         name: <...\0>
         ...
         args: arg0; arg1; ...; 0
         arg0: <...\0>
         arg1: <...\0>
            ...

         execl(name, arg0, arg1, ..., argn, 0)
         char *name, *arg0, *arg1, ..., *argn;

         execv(name, argv)
         char *name;
         char *argv[ ];

    DESCRIPTION
         Exec  overlays the calling process with the named file, then
         transfers to the beginning of the core image  of  the  file.
         There can be no return from the file; the calling core image
         is lost.

         Files remain open across exec calls.  Ignored signals remain
         ignored  across  exec, but signals that are caught are reset
         to their default values.

         Each user has a real user ID and group ID and  an  effective
         user ID and group ID.  The real ID identifies the person us-
         ing the system; the effective ID determines his access priv-
         ileges.  Exec changes the effective user and group ID to the
         owner of the executed file if the file has  the  ``set-user-
         ID'' or ``set-group-ID'' modes.  The real user ID is not af-
         fected.

         The form of this call differs somewhat depending on  whether
         it  is called from assembly language or C; see below for the
         C version.

         The first argument to exec is a pointer to the name  of  the
         file  to  be executed.  The second is the address of a null-
         terminated list of pointers to arguments to be passed to the
         file.  Conventionally, the first argument is the name of the
         file.  Each pointer addresses a string terminated by a  null
         byte.

         Once  the  called  file  starts execution, the arguments are
         available as follows.  The stack pointer points  to  a  word
         containing  the number of arguments.  Just above this number
         is a list of pointers to the argument  strings.   The  argu-
         ments are placed as high as possible in core.

                                  - 1 -

    EXEC(II)                      8/5/73                     EXEC(II)

           sp->    nargs
              arg0
              ...
              argn
              -1

          arg0:    <arg0\0>
              ...
          argn:    <argn\0>

         From  C, two interfaces are available.  execl is useful when
         a known file with known arguments is being called; the argu-
         ments  to  execl  are the character strings constituting the
         file and the arguments; as in the basic call, the first  ar-
         gument  is  conventionally the same as the file name (or its
         last component).  A 0 argument must end the argument list.

         The execv version is useful when the number of arguments  is
         unknown  in  advance; the arguments to execv are the name of
         the file to be executed and a vector of  strings  containing
         the arguments.  The last argument string must be followed by
         a 0 pointer.

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

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

         where argc is the argument count and argv  is  an  array  of
         character pointers to the arguments themselves.  As indicat-
         ed, argc is conventionally at least one and the first member
         of  the  array points to a string containing the name of the
         file.

         Argv  is  not  directly  usable  in  another  execv,   since
         argv[argc] is -1 and not 0.

    SEE ALSO
         fork(II)

    DIAGNOSTICS
         If  the file cannot be found, if it is not executable, if it
         does not have a valid header (407,  410,  or  411  octal  as
         first  word), if maximum memory is exceeded, or if the argu-
         ments require more than 512 bytes a return from exec consti-
         tutes  the  diagnostic;  the error bit (c-bit) is set.  Even
         for the super-user, at least one of  the  execute-permission
         bits  must be set for a file to be executed.  From C the re-
         turned value is -1.

    BUGS
         Only 512 characters of arguments are allowed.

                                  - 2 -