EXECVE.2
上传用户:datang2001
上传日期:2007-02-01
资源大小:53269k
文件大小:7k
源码类别:

操作系统开发

开发平台:

C/C++

  1. EXECVE(2)                 Minix Programmer's Manual                  EXECVE(2)
  2. NAME
  3.      execve - execute a file
  4. SYNOPSIS
  5.      #include <unistd.h>
  6.      int execve(const char *name, char *const argv[], char *const envp[])
  7. DESCRIPTION
  8.      Execve transforms the calling  process  into  a  new  process.   The  new
  9.      process is constructed from an ordinary file called the new process file.
  10.      This file is either an executable object file, or a file of data  for  an
  11.      interpreter.   An  executable  object  file  consists  of  an identifying
  12.      header, followed by pages of data representing the initial program (text)
  13.      and  initialized  data  pages.   Additional pages may be specified by the
  14.      header to be initialized with zero data.  See a.out(5).
  15.      An interpreter file begins with a line of the  form  ``#!  interpreter''.
  16.      (Minix-vmd  only.)   When  an  interpreter  file  is execve'd, the system
  17.      execve's the specified interpreter, giving it the name of the  originally
  18.      exec'd  file  as  an  argument and shifting over the rest of the original
  19.      arguments.
  20.      There can be no return from a successful execve because the calling  core
  21.      image  is  lost.   This is the mechanism whereby different process images
  22.      become active.
  23.      The argument argv is a null-terminated array  of  character  pointers  to
  24.      null-terminated character strings.  These strings constitute the argument
  25.      list to be made available to the new process.  By  convention,  at  least
  26.      one argument must be present in this array, and the first element of this
  27.      array should be  the  name  of  the  executed  program  (i.e.,  the  last
  28.      component of name).
  29.      The argument envp is also a null-terminated array of  character  pointers
  30.      to  null-terminated  strings.   These strings pass information to the new
  31.      process that is not directly an argument to the command (see environ(7)).
  32.      Descriptors open in the calling process remain open in the  new  process,
  33.      except  for those for which the close-on-exec flag is set (see close(2)).
  34.      Descriptors that remain open are unaffected by execve.
  35.      Ignored signals remain ignored across an execve,  but  signals  that  are
  36.      caught are reset to their default values.  Blocked signals remain blocked
  37.      regardless of changes to the signal action.  The signal stack is reset to
  38.      be undefined (see sigaction(2) for more information).
  39.      Each process has real user and group IDs and an effective user and  group
  40.      IDs.   The  real ID identifies the person using the system; the effective
  41.      ID determines his access privileges.  Execve changes the  effective  user
  42. 4BSD                              May 22, 1986                               1
  43. EXECVE(2)                 Minix Programmer's Manual                  EXECVE(2)
  44.      and group ID to the owner of the executed file if the file has the  "set-
  45.      user-ID" or "set-group-ID" modes.  The real user ID is not affected.
  46.      The new process also inherits the following attributes from  the  calling
  47.      process:
  48.           process ID              see getpid(2)
  49.           parent process ID       see getppid(2)
  50.           process group ID        see getpgrp(2)
  51.           access groups           see getgroups(2)
  52.           working directory       see chdir(2)
  53.           root directory          see chroot(2)
  54.           control terminal        see tty(4)
  55.           alarm timer             see alarm(2)
  56.           file mode mask          see umask(2)
  57.           signal mask             see sigaction(2), sigprocmask(2)
  58.      When the executed program begins, it is called as follows:
  59.           int main(int argc, char *const argv[], char *const envp[]);
  60.           exit(main(argc, argv, envp));
  61.      where argc is the number of elements in argv (the ``arg count'') and argv
  62.      is the array of character pointers to the arguments themselves.
  63.      Envp is a pointer to an array of strings that constitute the  environment
  64.      of  the  process.   A  pointer to this array is also stored in the global
  65.      variable ``environ''.  Each string consists of a  name,  an  "=",  and  a
  66.      null-terminated  value.   The  array  of pointers is terminated by a null
  67.      pointer.  The shell sh(1) passes an environment  entry  for  each  global
  68.      shell  variable  defined  when the program is called.  See environ(7) for
  69.      some conventionally used names.
  70. RETURN VALUE
  71.      If execve returns to the calling  process  an  error  has  occurred;  the
  72.      return  value  will  be  -1 and the global variable errno will contain an
  73.      error code.
  74. ERRORS
  75.      Execve will fail and return to the calling process if one or more of  the
  76.      following are true:
  77.      [ENOTDIR]      A component of the path prefix is not a directory.
  78.      [ENAMETOOLONG] The path name exceeds PATH_MAX characters.
  79.      [ENOENT]       The new process file does not exist.
  80. 4BSD                              May 22, 1986                               2
  81. EXECVE(2)                 Minix Programmer's Manual                  EXECVE(2)
  82.      [ELOOP]        Too many symbolic links were  encountered  in  translating
  83.                     the pathname.  (Minix-vmd)
  84.      [EACCES]       Search permission is denied for a component  of  the  path
  85.                     prefix.
  86.      [EACCES]       The new process file is not an ordinary file.
  87.      [EACCES]       The new process file mode denies execute permission.
  88.      [ENOEXEC]      The  new  process  file   has   the   appropriate   access
  89.                     permission, but has an invalid magic number in its header.
  90.      [ENOMEM]       The new process requires more  (virtual)  memory  than  is
  91.                     currently available.
  92.      [E2BIG]        The number of bytes in the new process's argument list  is
  93.                     larger  than  the system-imposed limit ARG_MAX.  The limit
  94.                     in the system as released is 4096 bytes for 16-bit  Minix,
  95.                     16384 bytes for 32-bit Minix, and unlimited for Minix-vmd.
  96.      [EFAULT]       Path, argv, or envp point to an illegal address.
  97.      [EIO]          An I/O error occurred while reading from the file system.
  98. CAVEATS
  99.      If a program is setuid to a non-super-user, but is executed when the real
  100.      uid  is ``root'', then the program has some of the powers of a super-user
  101.      as well.
  102. SEE ALSO
  103.      exit(2), fork(2), execl(3), environ(7).
  104. 4BSD                              May 22, 1986                               3