EXECVE.2
上传用户:jnzhq888
上传日期:2007-01-18
资源大小:51694k
文件大小:6k
源码类别:

操作系统开发

开发平台:

WINDOWS

  1. ." Copyright (c) 1980 Regents of the University of California.
  2. ." All rights reserved.  The Berkeley software License Agreement
  3. ." specifies the terms and conditions for redistribution.
  4. ."
  5. ." @(#)execve.2 6.7 (Berkeley) 5/22/86
  6. ."
  7. .TH EXECVE 2 "May 22, 1986"
  8. .UC 4
  9. .SH NAME
  10. execve - execute a file
  11. .SH SYNOPSIS
  12. .nf
  13. .ft B
  14. #include <unistd.h>
  15. int execve(const char *fInamefP, char *const fIargvfP[], char *const fIenvpfP[])
  16. .ft R
  17. .fi
  18. .SH DESCRIPTION
  19. .B Execve
  20. transforms the calling process into a new process.
  21. The new process is constructed from an ordinary file
  22. called the fInew process filefP.
  23. This file is either an executable object file,
  24. or a file of data for an interpreter.
  25. An executable object file consists of an identifying header,
  26. followed by pages of data representing the initial program (text)
  27. and initialized data pages.  Additional pages may be specified
  28. by the header to be initialized with zero data.  See
  29. .BR a.out (5).
  30. .PP
  31. An interpreter file begins with a line of the form ``#! fIinterpreterfP''.
  32. (Minix-vmd only.)
  33. When an interpreter file is
  34. .BR execve| 'd,
  35. the system fBexecvefP|'s the specified fIinterpreterfP, giving
  36. it the name of the originally exec'd file as an argument and
  37. shifting over the rest of the original arguments.
  38. .PP
  39. There can be no return from a successful fBexecvefP because the calling
  40. core image is lost.
  41. This is the mechanism whereby different process images become active.
  42. .PP
  43. The argument fIargvfP is a null-terminated array of character pointers
  44. to null-terminated character strings.  These strings constitute
  45. the argument list to be made available to the new
  46. process.  By convention, at least one argument must be present in
  47. this array, and the first element of this array should be
  48. the name of the executed program (i.e., the last component of fInamefP).
  49. .PP
  50. The argument fIenvpfP is also a null-terminated array of character pointers
  51. to null-terminated strings.  These strings pass information to the
  52. new process that is not directly an argument to the command (see
  53. .BR environ (7)).
  54. .PP
  55. Descriptors open in the calling process remain open in
  56. the new process, except for those for which the close-on-exec
  57. flag is set (see
  58. .BR close (2)).
  59. Descriptors that remain open are unaffected by
  60. .BR execve .
  61. .PP
  62. Ignored signals remain ignored across an
  63. .BR execve ,
  64. but signals that are caught are reset to their default values.
  65. Blocked signals remain blocked regardless of changes to the signal action.
  66. The signal stack is reset to be undefined (see
  67. .BR sigaction (2) 
  68. for more information).
  69. .PP
  70. Each process has
  71. .I real
  72. user and group IDs and an
  73. .I effective
  74. user and group IDs.  The
  75. .I real
  76. ID identifies the person using the system; the
  77. .I effective
  78. ID determines his access privileges.
  79. .B Execve
  80. changes the effective user and group ID to
  81. the owner of the executed file if the file has the *(lqset-user-ID*(rq
  82. or *(lqset-group-ID*(rq modes.  The
  83. .I real
  84. user ID is not affected.
  85. .PP
  86. The new process also inherits the following attributes from
  87. the calling process:
  88. .PP
  89. .in +5n
  90. .nf
  91. .ta +2i
  92. process ID see fBgetpidfP|(2)
  93. parent process ID see fBgetppidfP|(2)
  94. process group ID see fBgetpgrpfP|(2)
  95. access groups see fBgetgroupsfP|(2)
  96. working directory see fBchdirfP|(2)
  97. root directory see fBchrootfP|(2)
  98. control terminal see fBttyfP|(4)
  99. alarm timer see fBalarmfP|(2)
  100. file mode mask see fBumaskfP|(2)
  101. signal mask see fBsigactionfP|(2), fBsigprocmaskfP|(2)
  102. .in -5n
  103. .fi
  104. .PP
  105. When the executed program begins, it is called as follows:
  106. .PP
  107. .RS
  108. .ft B
  109. .nf
  110. int main(int fIargcfP, char *const fIargvfP[], char *const fIenvpfP[]);
  111. exit(main(fIargcfP, fIargvfP, fIenvpfP));
  112. .fi
  113. .ft R
  114. .RE
  115. .PP
  116. where
  117. .I argc
  118. is the number of elements in fIargvfP
  119. (the ``arg count'')
  120. and
  121. .I argv
  122. is the array of character pointers
  123. to the arguments themselves.
  124. .PP
  125. .I Envp
  126. is a pointer to an array of strings that constitute
  127. the
  128. .I environment
  129. of the process.
  130. A pointer to this array is also stored in the global variable ``environ''.
  131. Each string consists of a name, an *(lq=*(rq, and a null-terminated value.
  132. The array of pointers is terminated by a null pointer.
  133. The shell
  134. .BR sh (1)
  135. passes an environment entry for each global shell variable
  136. defined when the program is called.
  137. See
  138. .BR environ (7)
  139. for some conventionally
  140. used names.
  141. .SH "RETURN VALUE
  142. If
  143. .B execve
  144. returns to the calling process an error has occurred; the
  145. return value will be -1 and the global variable
  146. .B errno
  147. will contain an error code.
  148. .SH ERRORS
  149. .B Execve
  150. will fail and return to the calling process if one or more
  151. of the following are true:
  152. .TP 15
  153. [ENOTDIR]
  154. A component of the path prefix is not a directory.
  155. .TP 15
  156. [ENAMETOOLONG]
  157. The path name exceeds PATH_MAX characters.
  158. .TP 15
  159. [ENOENT]
  160. The new process file does not exist.
  161. .TP 15
  162. [ELOOP]
  163. Too many symbolic links were encountered in translating the pathname.
  164. (Minix-vmd)
  165. .TP 15
  166. [EACCES]
  167. Search permission is denied for a component of the path prefix.
  168. .TP 15
  169. [EACCES]
  170. The new process file is not an ordinary file.
  171. .TP 15
  172. [EACCES]
  173. The new process file mode denies execute permission.
  174. .TP 15
  175. [ENOEXEC]
  176. The new process file has the appropriate access
  177. permission, but has an invalid magic number in its header.
  178. .TP 15
  179. [ENOMEM]
  180. The new process requires more (virtual) memory than
  181. is currently available.
  182. .TP 15
  183. [E2BIG]
  184. The number of bytes in the new process's argument list
  185. is larger than the system-imposed limit ARG_MAX.
  186. The limit in the system as released is 4096 bytes for
  187. 16-bit Minix, 16384 bytes for 32-bit Minix, and unlimited for Minix-vmd.
  188. .TP 15
  189. [EFAULT]
  190. fIPathfP|, fIargvfP|, or fIenvpfP point
  191. to an illegal address.
  192. .TP 15
  193. [EIO]
  194. An I/O error occurred while reading from the file system.
  195. .SH CAVEATS
  196. If a program is
  197. .I setuid
  198. to a non-super-user, but is executed when
  199. the real fBuidfP is ``root'', then the program has some of the powers
  200. of a super-user as well.
  201. .SH "SEE ALSO"
  202. .BR exit (2),
  203. .BR fork (2),
  204. .BR execl (3),
  205. .BR environ (7).