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

操作系统开发

开发平台:

C/C++

  1. .TH FCNTL 2
  2. .SH NAME
  3. fcntl - miscellaneous file descriptor control functions
  4. .SH SYNOPSIS
  5. .nf
  6. .ft B
  7. #include <fcntl.h>
  8. int fcntl(int fIfdfP, int *fIcmdfP, fR[fPfIdatafPfR]fP)
  9. .ft P
  10. .fi
  11. .SH DESCRIPTION
  12. .de SP
  13. .if t .sp 0.4
  14. .if n .sp
  15. ..
  16. .B Fcntl()
  17. performs several file descriptor related functions, like duplicating a file
  18. descriptor, setting the "close on exec" attribute, etc.  The
  19. .I fd
  20. argument is the file descriptor to operate on,
  21. .I cmd
  22. is the command code of the operation to perform, and
  23. .I data
  24. is an optional argument to give or receive parameters.  The command
  25. codes and other symbols and types are declared in <fcntl.h>.  The commands
  26. are:
  27. .SP
  28. .BI "fcntl(" fd ", F_DUPFD, int " fd2 ")"
  29. .RS
  30. Returns a new file descriptor that is a duplicate of file descriptor
  31. .IR fd .
  32. It shares the same file pointer and the same file status flags, but has
  33. separate file descriptor flags that are initially off.  The value of the
  34. duplicate file descriptor is the first free file descriptor greater than
  35. or equal to
  36. .IR fd2 .
  37. .RE
  38. .SP
  39. .BI "fcntl(" fd ", F_GETFD)"
  40. .RS
  41. Returns the file descriptor flags associated with file descriptor
  42. .IR fd .
  43. The flags are the "close on exec" flag
  44. .B FD_CLOEXEC
  45. that, when set, causes the file descriptor to be closed when the process
  46. executes another program.  The Minix-vmd specific
  47. .B FD_ASYNCHIO
  48. flag marks a file descriptor for asynchronous I/O operation.
  49. .RE
  50. .SP
  51. .BI "fcntl(" fd ", F_SETFD, int " flags ")"
  52. .RS
  53. Set the file descriptor flags of
  54. .I fd
  55. to
  56. .IR flags .
  57. .RE
  58. .SP
  59. .BI "fcntl(" fd ", F_GETFL)"
  60. .RS
  61. Return the file status flags and file access modes associated with the file
  62. associated with file descriptor
  63. .IR fd .
  64. The file status flags are
  65. .B O_NONBLOCK
  66. (non blocking I/O) and
  67. .B O_APPEND
  68. (append mode).  The file access modes are
  69. .B O_RDONLY
  70. (read-only),
  71. .B O_WRONLY
  72. (write-only) and
  73. .B O_RDWR
  74. (read-write).  These flags are also used in the second argument of
  75. .BR open (2).
  76. .RE
  77. .SP
  78. .BI "fcntl(" fd ", F_SETFL, int " flags ")"
  79. .RS
  80. Set the file status flags of the file referenced by
  81. .I fd
  82. to
  83. .IR flags .
  84. Only
  85. .B O_NONBLOCK
  86. and
  87. .B O_APPEND
  88. may be changed.  Access mode flags are ignored.
  89. .RE
  90. .SP
  91. The next four commands use a parameter of type
  92. .B struct flock
  93. that is defined in <fcntl.h> as:
  94. .SP
  95. .RS
  96. .nf
  97. .ta +4n +8n +12n
  98. struct flock {
  99. short l_type; /* F_RDLCK, F_WRLCK, or F_UNLCK */
  100. short l_whence; /* SEEK_SET, SEEK_CUR, or SEEK_END */
  101. off_t l_start; /* byte offset to start of segment */
  102. off_t l_len; /* length of segment */
  103. pid_t l_pid; /* process id of the locks' owner */
  104. };
  105. .fi
  106. .RE
  107. .SP
  108. This structure describes a segment of a file.
  109. .B L_type
  110. is the lock operation performed on the file segment:
  111. .B F_RDLCK
  112. to set a read lock,
  113. .B F_WRLCK
  114. to set a write lock, and
  115. .B F_UNLCK
  116. to remove a lock.  Several processes may have a read lock on a segment, but
  117. only one process can have a write lock.
  118. .B L_whence
  119. tells if the
  120. .B l_start
  121. offset must be interpreted from the start of the file
  122. .RB ( SEEK_SET ),
  123. the current file position
  124. .RB ( SEEK_CUR ),
  125. or the end of the file
  126. .RB ( SEEK_END ).
  127. This is analogous to the third parameter of
  128. .BR lseek (2).
  129. These
  130. .B SEEK_*
  131. symbols are declared in <unistd.h>.
  132. .B L_start
  133. is the starting offset of the segment of the file.
  134. .B L_end
  135. is the length of the segment.  If zero then the segment extends until end of
  136. file.
  137. .B L_pid
  138. is the process-id of the process currently holding a lock on the segment.
  139. It is returned by
  140. .BR F_GETLK .
  141. .SP
  142. .BI "fcntl(" fd ", F_GETLK, struct flock *" lkp ")"
  143. .RS
  144. Find out if some other process has a lock on a segment of the file
  145. associated by file descriptor
  146. .I fd
  147. that overlaps with the segment described by the
  148. .B flock
  149. structure pointed to by
  150. .IR lkp .
  151. If the segment is not locked then
  152. .B l_type
  153. is set to
  154. .BR F_UNLCK .
  155. Otherwise an
  156. .B flock
  157. structure is returned through
  158. .I lkp
  159. that describes the lock held by the other process.
  160. .B L_start
  161. is set relative to the start of the file.
  162. .RE
  163. .SP
  164. .BI "fcntl(" fd ", F_SETLK, struct flock *" lkp ")"
  165. .RS
  166. Register a lock on a segment of the file associated with file descriptor
  167. .IR fd .
  168. The file segment is described by the
  169. .B struct flock
  170. pointed to by
  171. .IR lkp .
  172. This call returns an error if any part of the segment is already locked.
  173. .RE
  174. .SP
  175. .BI "fcntl(" fd ", F_SETLKW, struct flock *" lkp ")"
  176. .RS
  177. Register a lock on a segment of the file associated with file descriptor
  178. .IR fd .
  179. The file segment is described by the
  180. .B struct flock
  181. pointed to by
  182. .IR lkp .
  183. This call blocks waiting for the lock to be released if any part of the
  184. segment is already locked.
  185. .RE
  186. .SP
  187. .BI "fcntl(" fd ", F_FREESP, struct flock *" lkp ")"
  188. .RS
  189. Free a segment of disk space occupied by the file associated with file
  190. descriptor
  191. .IR fd .
  192. The segment is described by the
  193. .B struct flock
  194. pointed to by
  195. .IR lkp .
  196. The file is truncated in length to the byte position indicated by
  197. .B l_start
  198. if
  199. .B l_len
  200. is zero.  If
  201. .B l_len
  202. is nonzero then the file keeps its size, but the freed bytes now read as
  203. zeros.  (Other than sharing the flock structure, this call has nothing to do
  204. with locking.)
  205. .RE
  206. .SP
  207. .BI "fcntl(" fd ", F_SEEK, u64_t " pos ")"
  208. .RS
  209. This Minix-vmd specific call sets the file position of the file associated
  210. with file descriptor
  211. .I fd
  212. to the byte offset indicated by the 64-bit number
  213. .IR pos .
  214. This is analogous to the call
  215. .SP
  216. .RS
  217. .BI "lseek(" fd ", " pos ", SEEK_SET)"
  218. .RE
  219. .SP
  220. except that
  221. .B F_SEEK
  222. can be used on devices larger than 4 gigabyte.
  223. .RE
  224. .SH "SEE ALSO"
  225. .BR open (2),
  226. .BR dup (2),
  227. .BR lseek (2),
  228. .BR ftruncate (3),
  229. .BR int64 (3).
  230. .SH DIAGNOSTICS
  231. .B Fcntl
  232. returns a file descriptor, flags, or
  233. .B 0
  234. to indicate success.  On error
  235. .B -1
  236. is returned, with
  237. .B errno
  238. set to the appropriate error code.  The most notable errors are:
  239. .TP 5
  240. .B EINTR
  241. If a blocked
  242. .B F_SETLKW
  243. operation is interrupted by a signal that is caught.
  244. .TP
  245. .B EAGAIN
  246. By
  247. .B F_SETLK
  248. if a segment cannot be locked.
  249. .TP
  250. .B EBADF
  251. A bad file descriptor in general, or an attempt to place a write lock on a
  252. file that is not open for writing, etc.
  253. .TP
  254. .B ENOLCK
  255. No locks available, the file system code has run out of internal table
  256. space.
  257. .SH AUTHOR
  258. Kees J. Bot (kjb@cs.vu.nl)