manual/llio.texi: update manual to document file-private locks
[jlayton/glibc.git] / manual / llio.texi
1 @node Low-Level I/O, File System Interface, I/O on Streams, Top
2 @c %MENU% Low-level, less portable I/O
3 @chapter Low-Level Input/Output
4
5 This chapter describes functions for performing low-level input/output
6 operations on file descriptors.  These functions include the primitives
7 for the higher-level I/O functions described in @ref{I/O on Streams}, as
8 well as functions for performing low-level control operations for which
9 there are no equivalents on streams.
10
11 Stream-level I/O is more flexible and usually more convenient;
12 therefore, programmers generally use the descriptor-level functions only
13 when necessary.  These are some of the usual reasons:
14
15 @itemize @bullet
16 @item
17 For reading binary files in large chunks.
18
19 @item
20 For reading an entire file into core before parsing it.
21
22 @item
23 To perform operations other than data transfer, which can only be done
24 with a descriptor.  (You can use @code{fileno} to get the descriptor
25 corresponding to a stream.)
26
27 @item
28 To pass descriptors to a child process.  (The child can create its own
29 stream to use a descriptor that it inherits, but cannot inherit a stream
30 directly.)
31 @end itemize
32
33 @menu
34 * Opening and Closing Files::           How to open and close file
35                                          descriptors.
36 * I/O Primitives::                      Reading and writing data.
37 * File Position Primitive::             Setting a descriptor's file
38                                          position.
39 * Descriptors and Streams::             Converting descriptor to stream
40                                          or vice-versa.
41 * Stream/Descriptor Precautions::       Precautions needed if you use both
42                                          descriptors and streams.
43 * Scatter-Gather::                      Fast I/O to discontinuous buffers.
44 * Memory-mapped I/O::                   Using files like memory.
45 * Waiting for I/O::                     How to check for input or output
46                                          on multiple file descriptors.
47 * Synchronizing I/O::                   Making sure all I/O actions completed.
48 * Asynchronous I/O::                    Perform I/O in parallel.
49 * Control Operations::                  Various other operations on file
50                                          descriptors.
51 * Duplicating Descriptors::             Fcntl commands for duplicating
52                                          file descriptors.
53 * Descriptor Flags::                    Fcntl commands for manipulating
54                                          flags associated with file
55                                          descriptors.
56 * File Status Flags::                   Fcntl commands for manipulating
57                                          flags associated with open files.
58 * File Locks::                          Fcntl commands for implementing
59                                          file locking.
60 * File-private Locks::                  Fcntl commands for implementing
61                                          file-private locking.
62 * Interrupt Input::                     Getting an asynchronous signal when
63                                          input arrives.
64 * IOCTLs::                              Generic I/O Control operations.
65 @end menu
66
67
68 @node Opening and Closing Files
69 @section Opening and Closing Files
70
71 @cindex opening a file descriptor
72 @cindex closing a file descriptor
73 This section describes the primitives for opening and closing files
74 using file descriptors.  The @code{open} and @code{creat} functions are
75 declared in the header file @file{fcntl.h}, while @code{close} is
76 declared in @file{unistd.h}.
77 @pindex unistd.h
78 @pindex fcntl.h
79
80 @comment fcntl.h
81 @comment POSIX.1
82 @deftypefun int open (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}])
83 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
84 The @code{open} function creates and returns a new file descriptor for
85 the file named by @var{filename}.  Initially, the file position
86 indicator for the file is at the beginning of the file.  The argument
87 @var{mode} (@pxref{Permission Bits}) is used only when a file is
88 created, but it doesn't hurt to supply the argument in any case.
89
90 The @var{flags} argument controls how the file is to be opened.  This is
91 a bit mask; you create the value by the bitwise OR of the appropriate
92 parameters (using the @samp{|} operator in C).
93 @xref{File Status Flags}, for the parameters available.
94
95 The normal return value from @code{open} is a non-negative integer file
96 descriptor.  In the case of an error, a value of @math{-1} is returned
97 instead.  In addition to the usual file name errors (@pxref{File
98 Name Errors}), the following @code{errno} error conditions are defined
99 for this function:
100
101 @table @code
102 @item EACCES
103 The file exists but is not readable/writable as requested by the @var{flags}
104 argument, the file does not exist and the directory is unwritable so
105 it cannot be created.
106
107 @item EEXIST
108 Both @code{O_CREAT} and @code{O_EXCL} are set, and the named file already
109 exists.
110
111 @item EINTR
112 The @code{open} operation was interrupted by a signal.
113 @xref{Interrupted Primitives}.
114
115 @item EISDIR
116 The @var{flags} argument specified write access, and the file is a directory.
117
118 @item EMFILE
119 The process has too many files open.
120 The maximum number of file descriptors is controlled by the
121 @code{RLIMIT_NOFILE} resource limit; @pxref{Limits on Resources}.
122
123 @item ENFILE
124 The entire system, or perhaps the file system which contains the
125 directory, cannot support any additional open files at the moment.
126 (This problem cannot happen on @gnuhurdsystems{}.)
127
128 @item ENOENT
129 The named file does not exist, and @code{O_CREAT} is not specified.
130
131 @item ENOSPC
132 The directory or file system that would contain the new file cannot be
133 extended, because there is no disk space left.
134
135 @item ENXIO
136 @code{O_NONBLOCK} and @code{O_WRONLY} are both set in the @var{flags}
137 argument, the file named by @var{filename} is a FIFO (@pxref{Pipes and
138 FIFOs}), and no process has the file open for reading.
139
140 @item EROFS
141 The file resides on a read-only file system and any of @w{@code{O_WRONLY}},
142 @code{O_RDWR}, and @code{O_TRUNC} are set in the @var{flags} argument,
143 or @code{O_CREAT} is set and the file does not already exist.
144 @end table
145
146 @c !!! umask
147
148 If on a 32 bit machine the sources are translated with
149 @code{_FILE_OFFSET_BITS == 64} the function @code{open} returns a file
150 descriptor opened in the large file mode which enables the file handling
151 functions to use files up to @math{2^63} bytes in size and offset from
152 @math{-2^63} to @math{2^63}.  This happens transparently for the user
153 since all of the lowlevel file handling functions are equally replaced.
154
155 This function is a cancellation point in multi-threaded programs.  This
156 is a problem if the thread allocates some resources (like memory, file
157 descriptors, semaphores or whatever) at the time @code{open} is
158 called.  If the thread gets canceled these resources stay allocated
159 until the program ends.  To avoid this calls to @code{open} should be
160 protected using cancellation handlers.
161 @c ref pthread_cleanup_push / pthread_cleanup_pop
162
163 The @code{open} function is the underlying primitive for the @code{fopen}
164 and @code{freopen} functions, that create streams.
165 @end deftypefun
166
167 @comment fcntl.h
168 @comment Unix98
169 @deftypefun int open64 (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}])
170 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
171 This function is similar to @code{open}.  It returns a file descriptor
172 which can be used to access the file named by @var{filename}.  The only
173 difference is that on 32 bit systems the file is opened in the
174 large file mode.  I.e., file length and file offsets can exceed 31 bits.
175
176 When the sources are translated with @code{_FILE_OFFSET_BITS == 64} this
177 function is actually available under the name @code{open}.  I.e., the
178 new, extended API using 64 bit file sizes and offsets transparently
179 replaces the old API.
180 @end deftypefun
181
182 @comment fcntl.h
183 @comment POSIX.1
184 @deftypefn {Obsolete function} int creat (const char *@var{filename}, mode_t @var{mode})
185 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
186 This function is obsolete.  The call:
187
188 @smallexample
189 creat (@var{filename}, @var{mode})
190 @end smallexample
191
192 @noindent
193 is equivalent to:
194
195 @smallexample
196 open (@var{filename}, O_WRONLY | O_CREAT | O_TRUNC, @var{mode})
197 @end smallexample
198
199 If on a 32 bit machine the sources are translated with
200 @code{_FILE_OFFSET_BITS == 64} the function @code{creat} returns a file
201 descriptor opened in the large file mode which enables the file handling
202 functions to use files up to @math{2^63} in size and offset from
203 @math{-2^63} to @math{2^63}.  This happens transparently for the user
204 since all of the lowlevel file handling functions are equally replaced.
205 @end deftypefn
206
207 @comment fcntl.h
208 @comment Unix98
209 @deftypefn {Obsolete function} int creat64 (const char *@var{filename}, mode_t @var{mode})
210 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
211 This function is similar to @code{creat}.  It returns a file descriptor
212 which can be used to access the file named by @var{filename}.  The only
213 the difference is that on 32 bit systems the file is opened in the
214 large file mode.  I.e., file length and file offsets can exceed 31 bits.
215
216 To use this file descriptor one must not use the normal operations but
217 instead the counterparts named @code{*64}, e.g., @code{read64}.
218
219 When the sources are translated with @code{_FILE_OFFSET_BITS == 64} this
220 function is actually available under the name @code{open}.  I.e., the
221 new, extended API using 64 bit file sizes and offsets transparently
222 replaces the old API.
223 @end deftypefn
224
225 @comment unistd.h
226 @comment POSIX.1
227 @deftypefun int close (int @var{filedes})
228 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}}
229 The function @code{close} closes the file descriptor @var{filedes}.
230 Closing a file has the following consequences:
231
232 @itemize @bullet
233 @item
234 The file descriptor is deallocated.
235
236 @item
237 Any record locks owned by the process on the file are unlocked.
238
239 @item
240 When all file descriptors associated with a pipe or FIFO have been closed,
241 any unread data is discarded.
242 @end itemize
243
244 This function is a cancellation point in multi-threaded programs.  This
245 is a problem if the thread allocates some resources (like memory, file
246 descriptors, semaphores or whatever) at the time @code{close} is
247 called.  If the thread gets canceled these resources stay allocated
248 until the program ends.  To avoid this, calls to @code{close} should be
249 protected using cancellation handlers.
250 @c ref pthread_cleanup_push / pthread_cleanup_pop
251
252 The normal return value from @code{close} is @math{0}; a value of @math{-1}
253 is returned in case of failure.  The following @code{errno} error
254 conditions are defined for this function:
255
256 @table @code
257 @item EBADF
258 The @var{filedes} argument is not a valid file descriptor.
259
260 @item EINTR
261 The @code{close} call was interrupted by a signal.
262 @xref{Interrupted Primitives}.
263 Here is an example of how to handle @code{EINTR} properly:
264
265 @smallexample
266 TEMP_FAILURE_RETRY (close (desc));
267 @end smallexample
268
269 @item ENOSPC
270 @itemx EIO
271 @itemx EDQUOT
272 When the file is accessed by NFS, these errors from @code{write} can sometimes
273 not be detected until @code{close}.  @xref{I/O Primitives}, for details
274 on their meaning.
275 @end table
276
277 Please note that there is @emph{no} separate @code{close64} function.
278 This is not necessary since this function does not determine nor depend
279 on the mode of the file.  The kernel which performs the @code{close}
280 operation knows which mode the descriptor is used for and can handle
281 this situation.
282 @end deftypefun
283
284 To close a stream, call @code{fclose} (@pxref{Closing Streams}) instead
285 of trying to close its underlying file descriptor with @code{close}.
286 This flushes any buffered output and updates the stream object to
287 indicate that it is closed.
288
289 @node I/O Primitives
290 @section Input and Output Primitives
291
292 This section describes the functions for performing primitive input and
293 output operations on file descriptors: @code{read}, @code{write}, and
294 @code{lseek}.  These functions are declared in the header file
295 @file{unistd.h}.
296 @pindex unistd.h
297
298 @comment unistd.h
299 @comment POSIX.1
300 @deftp {Data Type} ssize_t
301 This data type is used to represent the sizes of blocks that can be
302 read or written in a single operation.  It is similar to @code{size_t},
303 but must be a signed type.
304 @end deftp
305
306 @cindex reading from a file descriptor
307 @comment unistd.h
308 @comment POSIX.1
309 @deftypefun ssize_t read (int @var{filedes}, void *@var{buffer}, size_t @var{size})
310 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
311 The @code{read} function reads up to @var{size} bytes from the file
312 with descriptor @var{filedes}, storing the results in the @var{buffer}.
313 (This is not necessarily a character string, and no terminating null
314 character is added.)
315
316 @cindex end-of-file, on a file descriptor
317 The return value is the number of bytes actually read.  This might be
318 less than @var{size}; for example, if there aren't that many bytes left
319 in the file or if there aren't that many bytes immediately available.
320 The exact behavior depends on what kind of file it is.  Note that
321 reading less than @var{size} bytes is not an error.
322
323 A value of zero indicates end-of-file (except if the value of the
324 @var{size} argument is also zero).  This is not considered an error.
325 If you keep calling @code{read} while at end-of-file, it will keep
326 returning zero and doing nothing else.
327
328 If @code{read} returns at least one character, there is no way you can
329 tell whether end-of-file was reached.  But if you did reach the end, the
330 next read will return zero.
331
332 In case of an error, @code{read} returns @math{-1}.  The following
333 @code{errno} error conditions are defined for this function:
334
335 @table @code
336 @item EAGAIN
337 Normally, when no input is immediately available, @code{read} waits for
338 some input.  But if the @code{O_NONBLOCK} flag is set for the file
339 (@pxref{File Status Flags}), @code{read} returns immediately without
340 reading any data, and reports this error.
341
342 @strong{Compatibility Note:} Most versions of BSD Unix use a different
343 error code for this: @code{EWOULDBLOCK}.  In @theglibc{},
344 @code{EWOULDBLOCK} is an alias for @code{EAGAIN}, so it doesn't matter
345 which name you use.
346
347 On some systems, reading a large amount of data from a character special
348 file can also fail with @code{EAGAIN} if the kernel cannot find enough
349 physical memory to lock down the user's pages.  This is limited to
350 devices that transfer with direct memory access into the user's memory,
351 which means it does not include terminals, since they always use
352 separate buffers inside the kernel.  This problem never happens on
353 @gnuhurdsystems{}.
354
355 Any condition that could result in @code{EAGAIN} can instead result in a
356 successful @code{read} which returns fewer bytes than requested.
357 Calling @code{read} again immediately would result in @code{EAGAIN}.
358
359 @item EBADF
360 The @var{filedes} argument is not a valid file descriptor,
361 or is not open for reading.
362
363 @item EINTR
364 @code{read} was interrupted by a signal while it was waiting for input.
365 @xref{Interrupted Primitives}.  A signal will not necessary cause
366 @code{read} to return @code{EINTR}; it may instead result in a
367 successful @code{read} which returns fewer bytes than requested.
368
369 @item EIO
370 For many devices, and for disk files, this error code indicates
371 a hardware error.
372
373 @code{EIO} also occurs when a background process tries to read from the
374 controlling terminal, and the normal action of stopping the process by
375 sending it a @code{SIGTTIN} signal isn't working.  This might happen if
376 the signal is being blocked or ignored, or because the process group is
377 orphaned.  @xref{Job Control}, for more information about job control,
378 and @ref{Signal Handling}, for information about signals.
379
380 @item EINVAL
381 In some systems, when reading from a character or block device, position
382 and size offsets must be aligned to a particular block size.  This error
383 indicates that the offsets were not properly aligned.
384 @end table
385
386 Please note that there is no function named @code{read64}.  This is not
387 necessary since this function does not directly modify or handle the
388 possibly wide file offset.  Since the kernel handles this state
389 internally, the @code{read} function can be used for all cases.
390
391 This function is a cancellation point in multi-threaded programs.  This
392 is a problem if the thread allocates some resources (like memory, file
393 descriptors, semaphores or whatever) at the time @code{read} is
394 called.  If the thread gets canceled these resources stay allocated
395 until the program ends.  To avoid this, calls to @code{read} should be
396 protected using cancellation handlers.
397 @c ref pthread_cleanup_push / pthread_cleanup_pop
398
399 The @code{read} function is the underlying primitive for all of the
400 functions that read from streams, such as @code{fgetc}.
401 @end deftypefun
402
403 @comment unistd.h
404 @comment Unix98
405 @deftypefun ssize_t pread (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off_t @var{offset})
406 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
407 @c This is usually a safe syscall.  The sysdeps/posix fallback emulation
408 @c is not MT-Safe because it uses lseek, read and lseek back, but is it
409 @c used anywhere?
410 The @code{pread} function is similar to the @code{read} function.  The
411 first three arguments are identical, and the return values and error
412 codes also correspond.
413
414 The difference is the fourth argument and its handling.  The data block
415 is not read from the current position of the file descriptor
416 @code{filedes}.  Instead the data is read from the file starting at
417 position @var{offset}.  The position of the file descriptor itself is
418 not affected by the operation.  The value is the same as before the call.
419
420 When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the
421 @code{pread} function is in fact @code{pread64} and the type
422 @code{off_t} has 64 bits, which makes it possible to handle files up to
423 @math{2^63} bytes in length.
424
425 The return value of @code{pread} describes the number of bytes read.
426 In the error case it returns @math{-1} like @code{read} does and the
427 error codes are also the same, with these additions:
428
429 @table @code
430 @item EINVAL
431 The value given for @var{offset} is negative and therefore illegal.
432
433 @item ESPIPE
434 The file descriptor @var{filedes} is associate with a pipe or a FIFO and
435 this device does not allow positioning of the file pointer.
436 @end table
437
438 The function is an extension defined in the Unix Single Specification
439 version 2.
440 @end deftypefun
441
442 @comment unistd.h
443 @comment Unix98
444 @deftypefun ssize_t pread64 (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off64_t @var{offset})
445 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
446 @c This is usually a safe syscall.  The sysdeps/posix fallback emulation
447 @c is not MT-Safe because it uses lseek64, read and lseek64 back, but is
448 @c it used anywhere?
449 This function is similar to the @code{pread} function.  The difference
450 is that the @var{offset} parameter is of type @code{off64_t} instead of
451 @code{off_t} which makes it possible on 32 bit machines to address
452 files larger than @math{2^31} bytes and up to @math{2^63} bytes.  The
453 file descriptor @code{filedes} must be opened using @code{open64} since
454 otherwise the large offsets possible with @code{off64_t} will lead to
455 errors with a descriptor in small file mode.
456
457 When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} on a
458 32 bit machine this function is actually available under the name
459 @code{pread} and so transparently replaces the 32 bit interface.
460 @end deftypefun
461
462 @cindex writing to a file descriptor
463 @comment unistd.h
464 @comment POSIX.1
465 @deftypefun ssize_t write (int @var{filedes}, const void *@var{buffer}, size_t @var{size})
466 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
467 The @code{write} function writes up to @var{size} bytes from
468 @var{buffer} to the file with descriptor @var{filedes}.  The data in
469 @var{buffer} is not necessarily a character string and a null character is
470 output like any other character.
471
472 The return value is the number of bytes actually written.  This may be
473 @var{size}, but can always be smaller.  Your program should always call
474 @code{write} in a loop, iterating until all the data is written.
475
476 Once @code{write} returns, the data is enqueued to be written and can be
477 read back right away, but it is not necessarily written out to permanent
478 storage immediately.  You can use @code{fsync} when you need to be sure
479 your data has been permanently stored before continuing.  (It is more
480 efficient for the system to batch up consecutive writes and do them all
481 at once when convenient.  Normally they will always be written to disk
482 within a minute or less.)  Modern systems provide another function
483 @code{fdatasync} which guarantees integrity only for the file data and
484 is therefore faster.
485 @c !!! xref fsync, fdatasync
486 You can use the @code{O_FSYNC} open mode to make @code{write} always
487 store the data to disk before returning; @pxref{Operating Modes}.
488
489 In the case of an error, @code{write} returns @math{-1}.  The following
490 @code{errno} error conditions are defined for this function:
491
492 @table @code
493 @item EAGAIN
494 Normally, @code{write} blocks until the write operation is complete.
495 But if the @code{O_NONBLOCK} flag is set for the file (@pxref{Control
496 Operations}), it returns immediately without writing any data and
497 reports this error.  An example of a situation that might cause the
498 process to block on output is writing to a terminal device that supports
499 flow control, where output has been suspended by receipt of a STOP
500 character.
501
502 @strong{Compatibility Note:} Most versions of BSD Unix use a different
503 error code for this: @code{EWOULDBLOCK}.  In @theglibc{},
504 @code{EWOULDBLOCK} is an alias for @code{EAGAIN}, so it doesn't matter
505 which name you use.
506
507 On some systems, writing a large amount of data from a character special
508 file can also fail with @code{EAGAIN} if the kernel cannot find enough
509 physical memory to lock down the user's pages.  This is limited to
510 devices that transfer with direct memory access into the user's memory,
511 which means it does not include terminals, since they always use
512 separate buffers inside the kernel.  This problem does not arise on
513 @gnuhurdsystems{}.
514
515 @item EBADF
516 The @var{filedes} argument is not a valid file descriptor,
517 or is not open for writing.
518
519 @item EFBIG
520 The size of the file would become larger than the implementation can support.
521
522 @item EINTR
523 The @code{write} operation was interrupted by a signal while it was
524 blocked waiting for completion.  A signal will not necessarily cause
525 @code{write} to return @code{EINTR}; it may instead result in a
526 successful @code{write} which writes fewer bytes than requested.
527 @xref{Interrupted Primitives}.
528
529 @item EIO
530 For many devices, and for disk files, this error code indicates
531 a hardware error.
532
533 @item ENOSPC
534 The device containing the file is full.
535
536 @item EPIPE
537 This error is returned when you try to write to a pipe or FIFO that
538 isn't open for reading by any process.  When this happens, a @code{SIGPIPE}
539 signal is also sent to the process; see @ref{Signal Handling}.
540
541 @item EINVAL
542 In some systems, when writing to a character or block device, position
543 and size offsets must be aligned to a particular block size.  This error
544 indicates that the offsets were not properly aligned.
545 @end table
546
547 Unless you have arranged to prevent @code{EINTR} failures, you should
548 check @code{errno} after each failing call to @code{write}, and if the
549 error was @code{EINTR}, you should simply repeat the call.
550 @xref{Interrupted Primitives}.  The easy way to do this is with the
551 macro @code{TEMP_FAILURE_RETRY}, as follows:
552
553 @smallexample
554 nbytes = TEMP_FAILURE_RETRY (write (desc, buffer, count));
555 @end smallexample
556
557 Please note that there is no function named @code{write64}.  This is not
558 necessary since this function does not directly modify or handle the
559 possibly wide file offset.  Since the kernel handles this state
560 internally the @code{write} function can be used for all cases.
561
562 This function is a cancellation point in multi-threaded programs.  This
563 is a problem if the thread allocates some resources (like memory, file
564 descriptors, semaphores or whatever) at the time @code{write} is
565 called.  If the thread gets canceled these resources stay allocated
566 until the program ends.  To avoid this, calls to @code{write} should be
567 protected using cancellation handlers.
568 @c ref pthread_cleanup_push / pthread_cleanup_pop
569
570 The @code{write} function is the underlying primitive for all of the
571 functions that write to streams, such as @code{fputc}.
572 @end deftypefun
573
574 @comment unistd.h
575 @comment Unix98
576 @deftypefun ssize_t pwrite (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off_t @var{offset})
577 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
578 @c This is usually a safe syscall.  The sysdeps/posix fallback emulation
579 @c is not MT-Safe because it uses lseek, write and lseek back, but is it
580 @c used anywhere?
581 The @code{pwrite} function is similar to the @code{write} function.  The
582 first three arguments are identical, and the return values and error codes
583 also correspond.
584
585 The difference is the fourth argument and its handling.  The data block
586 is not written to the current position of the file descriptor
587 @code{filedes}.  Instead the data is written to the file starting at
588 position @var{offset}.  The position of the file descriptor itself is
589 not affected by the operation.  The value is the same as before the call.
590
591 When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the
592 @code{pwrite} function is in fact @code{pwrite64} and the type
593 @code{off_t} has 64 bits, which makes it possible to handle files up to
594 @math{2^63} bytes in length.
595
596 The return value of @code{pwrite} describes the number of written bytes.
597 In the error case it returns @math{-1} like @code{write} does and the
598 error codes are also the same, with these additions:
599
600 @table @code
601 @item EINVAL
602 The value given for @var{offset} is negative and therefore illegal.
603
604 @item ESPIPE
605 The file descriptor @var{filedes} is associated with a pipe or a FIFO and
606 this device does not allow positioning of the file pointer.
607 @end table
608
609 The function is an extension defined in the Unix Single Specification
610 version 2.
611 @end deftypefun
612
613 @comment unistd.h
614 @comment Unix98
615 @deftypefun ssize_t pwrite64 (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off64_t @var{offset})
616 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
617 @c This is usually a safe syscall.  The sysdeps/posix fallback emulation
618 @c is not MT-Safe because it uses lseek64, write and lseek64 back, but
619 @c is it used anywhere?
620 This function is similar to the @code{pwrite} function.  The difference
621 is that the @var{offset} parameter is of type @code{off64_t} instead of
622 @code{off_t} which makes it possible on 32 bit machines to address
623 files larger than @math{2^31} bytes and up to @math{2^63} bytes.  The
624 file descriptor @code{filedes} must be opened using @code{open64} since
625 otherwise the large offsets possible with @code{off64_t} will lead to
626 errors with a descriptor in small file mode.
627
628 When the source file is compiled using @code{_FILE_OFFSET_BITS == 64} on a
629 32 bit machine this function is actually available under the name
630 @code{pwrite} and so transparently replaces the 32 bit interface.
631 @end deftypefun
632
633
634 @node File Position Primitive
635 @section Setting the File Position of a Descriptor
636
637 Just as you can set the file position of a stream with @code{fseek}, you
638 can set the file position of a descriptor with @code{lseek}.  This
639 specifies the position in the file for the next @code{read} or
640 @code{write} operation.  @xref{File Positioning}, for more information
641 on the file position and what it means.
642
643 To read the current file position value from a descriptor, use
644 @code{lseek (@var{desc}, 0, SEEK_CUR)}.
645
646 @cindex file positioning on a file descriptor
647 @cindex positioning a file descriptor
648 @cindex seeking on a file descriptor
649 @comment unistd.h
650 @comment POSIX.1
651 @deftypefun off_t lseek (int @var{filedes}, off_t @var{offset}, int @var{whence})
652 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
653 The @code{lseek} function is used to change the file position of the
654 file with descriptor @var{filedes}.
655
656 The @var{whence} argument specifies how the @var{offset} should be
657 interpreted, in the same way as for the @code{fseek} function, and it must
658 be one of the symbolic constants @code{SEEK_SET}, @code{SEEK_CUR}, or
659 @code{SEEK_END}.
660
661 @table @code
662 @item SEEK_SET
663 Specifies that @var{offset} is a count of characters from the beginning
664 of the file.
665
666 @item SEEK_CUR
667 Specifies that @var{offset} is a count of characters from the current
668 file position.  This count may be positive or negative.
669
670 @item SEEK_END
671 Specifies that @var{offset} is a count of characters from the end of
672 the file.  A negative count specifies a position within the current
673 extent of the file; a positive count specifies a position past the
674 current end.  If you set the position past the current end, and
675 actually write data, you will extend the file with zeros up to that
676 position.
677 @end table
678
679 The return value from @code{lseek} is normally the resulting file
680 position, measured in bytes from the beginning of the file.
681 You can use this feature together with @code{SEEK_CUR} to read the
682 current file position.
683
684 If you want to append to the file, setting the file position to the
685 current end of file with @code{SEEK_END} is not sufficient.  Another
686 process may write more data after you seek but before you write,
687 extending the file so the position you write onto clobbers their data.
688 Instead, use the @code{O_APPEND} operating mode; @pxref{Operating Modes}.
689
690 You can set the file position past the current end of the file.  This
691 does not by itself make the file longer; @code{lseek} never changes the
692 file.  But subsequent output at that position will extend the file.
693 Characters between the previous end of file and the new position are
694 filled with zeros.  Extending the file in this way can create a
695 ``hole'': the blocks of zeros are not actually allocated on disk, so the
696 file takes up less space than it appears to; it is then called a
697 ``sparse file''.
698 @cindex sparse files
699 @cindex holes in files
700
701 If the file position cannot be changed, or the operation is in some way
702 invalid, @code{lseek} returns a value of @math{-1}.  The following
703 @code{errno} error conditions are defined for this function:
704
705 @table @code
706 @item EBADF
707 The @var{filedes} is not a valid file descriptor.
708
709 @item EINVAL
710 The @var{whence} argument value is not valid, or the resulting
711 file offset is not valid.  A file offset is invalid.
712
713 @item ESPIPE
714 The @var{filedes} corresponds to an object that cannot be positioned,
715 such as a pipe, FIFO or terminal device.  (POSIX.1 specifies this error
716 only for pipes and FIFOs, but on @gnusystems{}, you always get
717 @code{ESPIPE} if the object is not seekable.)
718 @end table
719
720 When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} the
721 @code{lseek} function is in fact @code{lseek64} and the type
722 @code{off_t} has 64 bits which makes it possible to handle files up to
723 @math{2^63} bytes in length.
724
725 This function is a cancellation point in multi-threaded programs.  This
726 is a problem if the thread allocates some resources (like memory, file
727 descriptors, semaphores or whatever) at the time @code{lseek} is
728 called.  If the thread gets canceled these resources stay allocated
729 until the program ends.  To avoid this calls to @code{lseek} should be
730 protected using cancellation handlers.
731 @c ref pthread_cleanup_push / pthread_cleanup_pop
732
733 The @code{lseek} function is the underlying primitive for the
734 @code{fseek}, @code{fseeko}, @code{ftell}, @code{ftello} and
735 @code{rewind} functions, which operate on streams instead of file
736 descriptors.
737 @end deftypefun
738
739 @comment unistd.h
740 @comment Unix98
741 @deftypefun off64_t lseek64 (int @var{filedes}, off64_t @var{offset}, int @var{whence})
742 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
743 This function is similar to the @code{lseek} function.  The difference
744 is that the @var{offset} parameter is of type @code{off64_t} instead of
745 @code{off_t} which makes it possible on 32 bit machines to address
746 files larger than @math{2^31} bytes and up to @math{2^63} bytes.  The
747 file descriptor @code{filedes} must be opened using @code{open64} since
748 otherwise the large offsets possible with @code{off64_t} will lead to
749 errors with a descriptor in small file mode.
750
751 When the source file is compiled with @code{_FILE_OFFSET_BITS == 64} on a
752 32 bits machine this function is actually available under the name
753 @code{lseek} and so transparently replaces the 32 bit interface.
754 @end deftypefun
755
756 You can have multiple descriptors for the same file if you open the file
757 more than once, or if you duplicate a descriptor with @code{dup}.
758 Descriptors that come from separate calls to @code{open} have independent
759 file positions; using @code{lseek} on one descriptor has no effect on the
760 other.  For example,
761
762 @smallexample
763 @group
764 @{
765   int d1, d2;
766   char buf[4];
767   d1 = open ("foo", O_RDONLY);
768   d2 = open ("foo", O_RDONLY);
769   lseek (d1, 1024, SEEK_SET);
770   read (d2, buf, 4);
771 @}
772 @end group
773 @end smallexample
774
775 @noindent
776 will read the first four characters of the file @file{foo}.  (The
777 error-checking code necessary for a real program has been omitted here
778 for brevity.)
779
780 By contrast, descriptors made by duplication share a common file
781 position with the original descriptor that was duplicated.  Anything
782 which alters the file position of one of the duplicates, including
783 reading or writing data, affects all of them alike.  Thus, for example,
784
785 @smallexample
786 @{
787   int d1, d2, d3;
788   char buf1[4], buf2[4];
789   d1 = open ("foo", O_RDONLY);
790   d2 = dup (d1);
791   d3 = dup (d2);
792   lseek (d3, 1024, SEEK_SET);
793   read (d1, buf1, 4);
794   read (d2, buf2, 4);
795 @}
796 @end smallexample
797
798 @noindent
799 will read four characters starting with the 1024'th character of
800 @file{foo}, and then four more characters starting with the 1028'th
801 character.
802
803 @comment sys/types.h
804 @comment POSIX.1
805 @deftp {Data Type} off_t
806 This is a signed integer type used to represent file sizes.  In
807 @theglibc{}, this type is no narrower than @code{int}.
808
809 If the source is compiled with @code{_FILE_OFFSET_BITS == 64} this type
810 is transparently replaced by @code{off64_t}.
811 @end deftp
812
813 @comment sys/types.h
814 @comment Unix98
815 @deftp {Data Type} off64_t
816 This type is used similar to @code{off_t}.  The difference is that even
817 on 32 bit machines, where the @code{off_t} type would have 32 bits,
818 @code{off64_t} has 64 bits and so is able to address files up to
819 @math{2^63} bytes in length.
820
821 When compiling with @code{_FILE_OFFSET_BITS == 64} this type is
822 available under the name @code{off_t}.
823 @end deftp
824
825 These aliases for the @samp{SEEK_@dots{}} constants exist for the sake
826 of compatibility with older BSD systems.  They are defined in two
827 different header files: @file{fcntl.h} and @file{sys/file.h}.
828
829 @table @code
830 @item L_SET
831 An alias for @code{SEEK_SET}.
832
833 @item L_INCR
834 An alias for @code{SEEK_CUR}.
835
836 @item L_XTND
837 An alias for @code{SEEK_END}.
838 @end table
839
840 @node Descriptors and Streams
841 @section Descriptors and Streams
842 @cindex streams, and file descriptors
843 @cindex converting file descriptor to stream
844 @cindex extracting file descriptor from stream
845
846 Given an open file descriptor, you can create a stream for it with the
847 @code{fdopen} function.  You can get the underlying file descriptor for
848 an existing stream with the @code{fileno} function.  These functions are
849 declared in the header file @file{stdio.h}.
850 @pindex stdio.h
851
852 @comment stdio.h
853 @comment POSIX.1
854 @deftypefun {FILE *} fdopen (int @var{filedes}, const char *@var{opentype})
855 @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
856 The @code{fdopen} function returns a new stream for the file descriptor
857 @var{filedes}.
858
859 The @var{opentype} argument is interpreted in the same way as for the
860 @code{fopen} function (@pxref{Opening Streams}), except that
861 the @samp{b} option is not permitted; this is because @gnusystems{} make no
862 distinction between text and binary files.  Also, @code{"w"} and
863 @code{"w+"} do not cause truncation of the file; these have an effect only
864 when opening a file, and in this case the file has already been opened.
865 You must make sure that the @var{opentype} argument matches the actual
866 mode of the open file descriptor.
867
868 The return value is the new stream.  If the stream cannot be created
869 (for example, if the modes for the file indicated by the file descriptor
870 do not permit the access specified by the @var{opentype} argument), a
871 null pointer is returned instead.
872
873 In some other systems, @code{fdopen} may fail to detect that the modes
874 for file descriptor do not permit the access specified by
875 @code{opentype}.  @Theglibc{} always checks for this.
876 @end deftypefun
877
878 For an example showing the use of the @code{fdopen} function,
879 see @ref{Creating a Pipe}.
880
881 @comment stdio.h
882 @comment POSIX.1
883 @deftypefun int fileno (FILE *@var{stream})
884 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
885 This function returns the file descriptor associated with the stream
886 @var{stream}.  If an error is detected (for example, if the @var{stream}
887 is not valid) or if @var{stream} does not do I/O to a file,
888 @code{fileno} returns @math{-1}.
889 @end deftypefun
890
891 @comment stdio.h
892 @comment GNU
893 @deftypefun int fileno_unlocked (FILE *@var{stream})
894 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
895 The @code{fileno_unlocked} function is equivalent to the @code{fileno}
896 function except that it does not implicitly lock the stream if the state
897 is @code{FSETLOCKING_INTERNAL}.
898
899 This function is a GNU extension.
900 @end deftypefun
901
902 @cindex standard file descriptors
903 @cindex file descriptors, standard
904 There are also symbolic constants defined in @file{unistd.h} for the
905 file descriptors belonging to the standard streams @code{stdin},
906 @code{stdout}, and @code{stderr}; see @ref{Standard Streams}.
907 @pindex unistd.h
908
909 @comment unistd.h
910 @comment POSIX.1
911 @table @code
912 @item STDIN_FILENO
913 @vindex STDIN_FILENO
914 This macro has value @code{0}, which is the file descriptor for
915 standard input.
916 @cindex standard input file descriptor
917
918 @comment unistd.h
919 @comment POSIX.1
920 @item STDOUT_FILENO
921 @vindex STDOUT_FILENO
922 This macro has value @code{1}, which is the file descriptor for
923 standard output.
924 @cindex standard output file descriptor
925
926 @comment unistd.h
927 @comment POSIX.1
928 @item STDERR_FILENO
929 @vindex STDERR_FILENO
930 This macro has value @code{2}, which is the file descriptor for
931 standard error output.
932 @end table
933 @cindex standard error file descriptor
934
935 @node Stream/Descriptor Precautions
936 @section Dangers of Mixing Streams and Descriptors
937 @cindex channels
938 @cindex streams and descriptors
939 @cindex descriptors and streams
940 @cindex mixing descriptors and streams
941
942 You can have multiple file descriptors and streams (let's call both
943 streams and descriptors ``channels'' for short) connected to the same
944 file, but you must take care to avoid confusion between channels.  There
945 are two cases to consider: @dfn{linked} channels that share a single
946 file position value, and @dfn{independent} channels that have their own
947 file positions.
948
949 It's best to use just one channel in your program for actual data
950 transfer to any given file, except when all the access is for input.
951 For example, if you open a pipe (something you can only do at the file
952 descriptor level), either do all I/O with the descriptor, or construct a
953 stream from the descriptor with @code{fdopen} and then do all I/O with
954 the stream.
955
956 @menu
957 * Linked Channels::        Dealing with channels sharing a file position.
958 * Independent Channels::   Dealing with separately opened, unlinked channels.
959 * Cleaning Streams::       Cleaning a stream makes it safe to use
960                             another channel.
961 @end menu
962
963 @node Linked Channels
964 @subsection Linked Channels
965 @cindex linked channels
966
967 Channels that come from a single opening share the same file position;
968 we call them @dfn{linked} channels.  Linked channels result when you
969 make a stream from a descriptor using @code{fdopen}, when you get a
970 descriptor from a stream with @code{fileno}, when you copy a descriptor
971 with @code{dup} or @code{dup2}, and when descriptors are inherited
972 during @code{fork}.  For files that don't support random access, such as
973 terminals and pipes, @emph{all} channels are effectively linked.  On
974 random-access files, all append-type output streams are effectively
975 linked to each other.
976
977 @cindex cleaning up a stream
978 If you have been using a stream for I/O (or have just opened the stream),
979 and you want to do I/O using
980 another channel (either a stream or a descriptor) that is linked to it,
981 you must first @dfn{clean up} the stream that you have been using.
982 @xref{Cleaning Streams}.
983
984 Terminating a process, or executing a new program in the process,
985 destroys all the streams in the process.  If descriptors linked to these
986 streams persist in other processes, their file positions become
987 undefined as a result.  To prevent this, you must clean up the streams
988 before destroying them.
989
990 @node Independent Channels
991 @subsection Independent Channels
992 @cindex independent channels
993
994 When you open channels (streams or descriptors) separately on a seekable
995 file, each channel has its own file position.  These are called
996 @dfn{independent channels}.
997
998 The system handles each channel independently.  Most of the time, this
999 is quite predictable and natural (especially for input): each channel
1000 can read or write sequentially at its own place in the file.  However,
1001 if some of the channels are streams, you must take these precautions:
1002
1003 @itemize @bullet
1004 @item
1005 You should clean an output stream after use, before doing anything else
1006 that might read or write from the same part of the file.
1007
1008 @item
1009 You should clean an input stream before reading data that may have been
1010 modified using an independent channel.  Otherwise, you might read
1011 obsolete data that had been in the stream's buffer.
1012 @end itemize
1013
1014 If you do output to one channel at the end of the file, this will
1015 certainly leave the other independent channels positioned somewhere
1016 before the new end.  You cannot reliably set their file positions to the
1017 new end of file before writing, because the file can always be extended
1018 by another process between when you set the file position and when you
1019 write the data.  Instead, use an append-type descriptor or stream; they
1020 always output at the current end of the file.  In order to make the
1021 end-of-file position accurate, you must clean the output channel you
1022 were using, if it is a stream.
1023
1024 It's impossible for two channels to have separate file pointers for a
1025 file that doesn't support random access.  Thus, channels for reading or
1026 writing such files are always linked, never independent.  Append-type
1027 channels are also always linked.  For these channels, follow the rules
1028 for linked channels; see @ref{Linked Channels}.
1029
1030 @node Cleaning Streams
1031 @subsection Cleaning Streams
1032
1033 You can use @code{fflush} to clean a stream in most
1034 cases.
1035
1036 You can skip the @code{fflush} if you know the stream
1037 is already clean.  A stream is clean whenever its buffer is empty.  For
1038 example, an unbuffered stream is always clean.  An input stream that is
1039 at end-of-file is clean.  A line-buffered stream is clean when the last
1040 character output was a newline.  However, a just-opened input stream
1041 might not be clean, as its input buffer might not be empty.
1042
1043 There is one case in which cleaning a stream is impossible on most
1044 systems.  This is when the stream is doing input from a file that is not
1045 random-access.  Such streams typically read ahead, and when the file is
1046 not random access, there is no way to give back the excess data already
1047 read.  When an input stream reads from a random-access file,
1048 @code{fflush} does clean the stream, but leaves the file pointer at an
1049 unpredictable place; you must set the file pointer before doing any
1050 further I/O.
1051
1052 Closing an output-only stream also does @code{fflush}, so this is a
1053 valid way of cleaning an output stream.
1054
1055 You need not clean a stream before using its descriptor for control
1056 operations such as setting terminal modes; these operations don't affect
1057 the file position and are not affected by it.  You can use any
1058 descriptor for these operations, and all channels are affected
1059 simultaneously.  However, text already ``output'' to a stream but still
1060 buffered by the stream will be subject to the new terminal modes when
1061 subsequently flushed.  To make sure ``past'' output is covered by the
1062 terminal settings that were in effect at the time, flush the output
1063 streams for that terminal before setting the modes.  @xref{Terminal
1064 Modes}.
1065
1066 @node Scatter-Gather
1067 @section Fast Scatter-Gather I/O
1068 @cindex scatter-gather
1069
1070 Some applications may need to read or write data to multiple buffers,
1071 which are separated in memory.  Although this can be done easily enough
1072 with multiple calls to @code{read} and @code{write}, it is inefficient
1073 because there is overhead associated with each kernel call.
1074
1075 Instead, many platforms provide special high-speed primitives to perform
1076 these @dfn{scatter-gather} operations in a single kernel call.  @Theglibc{}
1077 will provide an emulation on any system that lacks these
1078 primitives, so they are not a portability threat.  They are defined in
1079 @code{sys/uio.h}.
1080
1081 These functions are controlled with arrays of @code{iovec} structures,
1082 which describe the location and size of each buffer.
1083
1084 @comment sys/uio.h
1085 @comment BSD
1086 @deftp {Data Type} {struct iovec}
1087
1088 The @code{iovec} structure describes a buffer. It contains two fields:
1089
1090 @table @code
1091
1092 @item void *iov_base
1093 Contains the address of a buffer.
1094
1095 @item size_t iov_len
1096 Contains the length of the buffer.
1097
1098 @end table
1099 @end deftp
1100
1101 @comment sys/uio.h
1102 @comment BSD
1103 @deftypefun ssize_t readv (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
1104 @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
1105 @c The fallback sysdeps/posix implementation, used even on GNU/Linux
1106 @c with old kernels that lack a full readv/writev implementation, may
1107 @c malloc the buffer into which data is read, if the total read size is
1108 @c too large for alloca.
1109
1110 The @code{readv} function reads data from @var{filedes} and scatters it
1111 into the buffers described in @var{vector}, which is taken to be
1112 @var{count} structures long.  As each buffer is filled, data is sent to the
1113 next.
1114
1115 Note that @code{readv} is not guaranteed to fill all the buffers.
1116 It may stop at any point, for the same reasons @code{read} would.
1117
1118 The return value is a count of bytes (@emph{not} buffers) read, @math{0}
1119 indicating end-of-file, or @math{-1} indicating an error.  The possible
1120 errors are the same as in @code{read}.
1121
1122 @end deftypefun
1123
1124 @comment sys/uio.h
1125 @comment BSD
1126 @deftypefun ssize_t writev (int @var{filedes}, const struct iovec *@var{vector}, int @var{count})
1127 @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
1128 @c The fallback sysdeps/posix implementation, used even on GNU/Linux
1129 @c with old kernels that lack a full readv/writev implementation, may
1130 @c malloc the buffer from which data is written, if the total write size
1131 @c is too large for alloca.
1132
1133 The @code{writev} function gathers data from the buffers described in
1134 @var{vector}, which is taken to be @var{count} structures long, and writes
1135 them to @code{filedes}.  As each buffer is written, it moves on to the
1136 next.
1137
1138 Like @code{readv}, @code{writev} may stop midstream under the same
1139 conditions @code{write} would.
1140
1141 The return value is a count of bytes written, or @math{-1} indicating an
1142 error.  The possible errors are the same as in @code{write}.
1143
1144 @end deftypefun
1145
1146 @c Note - I haven't read this anywhere. I surmised it from my knowledge
1147 @c of computer science. Thus, there could be subtleties I'm missing.
1148
1149 Note that if the buffers are small (under about 1kB), high-level streams
1150 may be easier to use than these functions.  However, @code{readv} and
1151 @code{writev} are more efficient when the individual buffers themselves
1152 (as opposed to the total output), are large.  In that case, a high-level
1153 stream would not be able to cache the data effectively.
1154
1155 @node Memory-mapped I/O
1156 @section Memory-mapped I/O
1157
1158 On modern operating systems, it is possible to @dfn{mmap} (pronounced
1159 ``em-map'') a file to a region of memory.  When this is done, the file can
1160 be accessed just like an array in the program.
1161
1162 This is more efficient than @code{read} or @code{write}, as only the regions
1163 of the file that a program actually accesses are loaded.  Accesses to
1164 not-yet-loaded parts of the mmapped region are handled in the same way as
1165 swapped out pages.
1166
1167 Since mmapped pages can be stored back to their file when physical
1168 memory is low, it is possible to mmap files orders of magnitude larger
1169 than both the physical memory @emph{and} swap space.  The only limit is
1170 address space.  The theoretical limit is 4GB on a 32-bit machine -
1171 however, the actual limit will be smaller since some areas will be
1172 reserved for other purposes.  If the LFS interface is used the file size
1173 on 32-bit systems is not limited to 2GB (offsets are signed which
1174 reduces the addressable area of 4GB by half); the full 64-bit are
1175 available.
1176
1177 Memory mapping only works on entire pages of memory.  Thus, addresses
1178 for mapping must be page-aligned, and length values will be rounded up.
1179 To determine the size of a page the machine uses one should use
1180
1181 @vindex _SC_PAGESIZE
1182 @smallexample
1183 size_t page_size = (size_t) sysconf (_SC_PAGESIZE);
1184 @end smallexample
1185
1186 @noindent
1187 These functions are declared in @file{sys/mman.h}.
1188
1189 @comment sys/mman.h
1190 @comment POSIX
1191 @deftypefun {void *} mmap (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off_t @var{offset})
1192 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1193
1194 The @code{mmap} function creates a new mapping, connected to bytes
1195 (@var{offset}) to (@var{offset} + @var{length} - 1) in the file open on
1196 @var{filedes}.  A new reference for the file specified by @var{filedes}
1197 is created, which is not removed by closing the file.
1198
1199 @var{address} gives a preferred starting address for the mapping.
1200 @code{NULL} expresses no preference. Any previous mapping at that
1201 address is automatically removed. The address you give may still be
1202 changed, unless you use the @code{MAP_FIXED} flag.
1203
1204 @vindex PROT_READ
1205 @vindex PROT_WRITE
1206 @vindex PROT_EXEC
1207 @var{protect} contains flags that control what kind of access is
1208 permitted.  They include @code{PROT_READ}, @code{PROT_WRITE}, and
1209 @code{PROT_EXEC}, which permit reading, writing, and execution,
1210 respectively.  Inappropriate access will cause a segfault (@pxref{Program
1211 Error Signals}).
1212
1213 Note that most hardware designs cannot support write permission without
1214 read permission, and many do not distinguish read and execute permission.
1215 Thus, you may receive wider permissions than you ask for, and mappings of
1216 write-only files may be denied even if you do not use @code{PROT_READ}.
1217
1218 @var{flags} contains flags that control the nature of the map.
1219 One of @code{MAP_SHARED} or @code{MAP_PRIVATE} must be specified.
1220
1221 They include:
1222
1223 @vtable @code
1224 @item MAP_PRIVATE
1225 This specifies that writes to the region should never be written back
1226 to the attached file.  Instead, a copy is made for the process, and the
1227 region will be swapped normally if memory runs low.  No other process will
1228 see the changes.
1229
1230 Since private mappings effectively revert to ordinary memory
1231 when written to, you must have enough virtual memory for a copy of
1232 the entire mmapped region if you use this mode with @code{PROT_WRITE}.
1233
1234 @item MAP_SHARED
1235 This specifies that writes to the region will be written back to the
1236 file.  Changes made will be shared immediately with other processes
1237 mmaping the same file.
1238
1239 Note that actual writing may take place at any time.  You need to use
1240 @code{msync}, described below, if it is important that other processes
1241 using conventional I/O get a consistent view of the file.
1242
1243 @item MAP_FIXED
1244 This forces the system to use the exact mapping address specified in
1245 @var{address} and fail if it can't.
1246
1247 @c One of these is official - the other is obviously an obsolete synonym
1248 @c Which is which?
1249 @item MAP_ANONYMOUS
1250 @itemx MAP_ANON
1251 This flag tells the system to create an anonymous mapping, not connected
1252 to a file.  @var{filedes} and @var{off} are ignored, and the region is
1253 initialized with zeros.
1254
1255 Anonymous maps are used as the basic primitive to extend the heap on some
1256 systems.  They are also useful to share data between multiple tasks
1257 without creating a file.
1258
1259 On some systems using private anonymous mmaps is more efficient than using
1260 @code{malloc} for large blocks.  This is not an issue with @theglibc{},
1261 as the included @code{malloc} automatically uses @code{mmap} where appropriate.
1262
1263 @c Linux has some other MAP_ options, which I have not discussed here.
1264 @c MAP_DENYWRITE, MAP_EXECUTABLE and MAP_GROWSDOWN don't seem applicable to
1265 @c user programs (and I don't understand the last two). MAP_LOCKED does
1266 @c not appear to be implemented.
1267
1268 @end vtable
1269
1270 @code{mmap} returns the address of the new mapping, or
1271 @code{MAP_FAILED} for an error.
1272
1273 Possible errors include:
1274
1275 @table @code
1276
1277 @item EINVAL
1278
1279 Either @var{address} was unusable, or inconsistent @var{flags} were
1280 given.
1281
1282 @item EACCES
1283
1284 @var{filedes} was not open for the type of access specified in @var{protect}.
1285
1286 @item ENOMEM
1287
1288 Either there is not enough memory for the operation, or the process is
1289 out of address space.
1290
1291 @item ENODEV
1292
1293 This file is of a type that doesn't support mapping.
1294
1295 @item ENOEXEC
1296
1297 The file is on a filesystem that doesn't support mapping.
1298
1299 @c On Linux, EAGAIN will appear if the file has a conflicting mandatory lock.
1300 @c However mandatory locks are not discussed in this manual.
1301 @c
1302 @c Similarly, ETXTBSY will occur if the MAP_DENYWRITE flag (not documented
1303 @c here) is used and the file is already open for writing.
1304
1305 @end table
1306
1307 @end deftypefun
1308
1309 @comment sys/mman.h
1310 @comment LFS
1311 @deftypefun {void *} mmap64 (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off64_t @var{offset})
1312 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1313 @c The page_shift auto detection when MMAP2_PAGE_SHIFT is -1 (it never
1314 @c is) would be thread-unsafe.
1315 The @code{mmap64} function is equivalent to the @code{mmap} function but
1316 the @var{offset} parameter is of type @code{off64_t}.  On 32-bit systems
1317 this allows the file associated with the @var{filedes} descriptor to be
1318 larger than 2GB.  @var{filedes} must be a descriptor returned from a
1319 call to @code{open64} or @code{fopen64} and @code{freopen64} where the
1320 descriptor is retrieved with @code{fileno}.
1321
1322 When the sources are translated with @code{_FILE_OFFSET_BITS == 64} this
1323 function is actually available under the name @code{mmap}.  I.e., the
1324 new, extended API using 64 bit file sizes and offsets transparently
1325 replaces the old API.
1326 @end deftypefun
1327
1328 @comment sys/mman.h
1329 @comment POSIX
1330 @deftypefun int munmap (void *@var{addr}, size_t @var{length})
1331 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1332
1333 @code{munmap} removes any memory maps from (@var{addr}) to (@var{addr} +
1334 @var{length}).  @var{length} should be the length of the mapping.
1335
1336 It is safe to unmap multiple mappings in one command, or include unmapped
1337 space in the range.  It is also possible to unmap only part of an existing
1338 mapping.  However, only entire pages can be removed.  If @var{length} is not
1339 an even number of pages, it will be rounded up.
1340
1341 It returns @math{0} for success and @math{-1} for an error.
1342
1343 One error is possible:
1344
1345 @table @code
1346
1347 @item EINVAL
1348 The memory range given was outside the user mmap range or wasn't page
1349 aligned.
1350
1351 @end table
1352
1353 @end deftypefun
1354
1355 @comment sys/mman.h
1356 @comment POSIX
1357 @deftypefun int msync (void *@var{address}, size_t @var{length}, int @var{flags})
1358 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1359
1360 When using shared mappings, the kernel can write the file at any time
1361 before the mapping is removed.  To be certain data has actually been
1362 written to the file and will be accessible to non-memory-mapped I/O, it
1363 is necessary to use this function.
1364
1365 It operates on the region @var{address} to (@var{address} + @var{length}).
1366 It may be used on part of a mapping or multiple mappings, however the
1367 region given should not contain any unmapped space.
1368
1369 @var{flags} can contain some options:
1370
1371 @vtable @code
1372
1373 @item MS_SYNC
1374
1375 This flag makes sure the data is actually written @emph{to disk}.
1376 Normally @code{msync} only makes sure that accesses to a file with
1377 conventional I/O reflect the recent changes.
1378
1379 @item MS_ASYNC
1380
1381 This tells @code{msync} to begin the synchronization, but not to wait for
1382 it to complete.
1383
1384 @c Linux also has MS_INVALIDATE, which I don't understand.
1385
1386 @end vtable
1387
1388 @code{msync} returns @math{0} for success and @math{-1} for
1389 error.  Errors include:
1390
1391 @table @code
1392
1393 @item EINVAL
1394 An invalid region was given, or the @var{flags} were invalid.
1395
1396 @item EFAULT
1397 There is no existing mapping in at least part of the given region.
1398
1399 @end table
1400
1401 @end deftypefun
1402
1403 @comment sys/mman.h
1404 @comment GNU
1405 @deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag})
1406 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1407
1408 This function can be used to change the size of an existing memory
1409 area. @var{address} and @var{length} must cover a region entirely mapped
1410 in the same @code{mmap} statement. A new mapping with the same
1411 characteristics will be returned with the length @var{new_length}.
1412
1413 One option is possible, @code{MREMAP_MAYMOVE}. If it is given in
1414 @var{flags}, the system may remove the existing mapping and create a new
1415 one of the desired length in another location.
1416
1417 The address of the resulting mapping is returned, or @math{-1}. Possible
1418 error codes include:
1419
1420 @table @code
1421
1422 @item EFAULT
1423 There is no existing mapping in at least part of the original region, or
1424 the region covers two or more distinct mappings.
1425
1426 @item EINVAL
1427 The address given is misaligned or inappropriate.
1428
1429 @item EAGAIN
1430 The region has pages locked, and if extended it would exceed the
1431 process's resource limit for locked pages.  @xref{Limits on Resources}.
1432
1433 @item ENOMEM
1434 The region is private writable, and insufficient virtual memory is
1435 available to extend it.  Also, this error will occur if
1436 @code{MREMAP_MAYMOVE} is not given and the extension would collide with
1437 another mapped region.
1438
1439 @end table
1440 @end deftypefun
1441
1442 This function is only available on a few systems.  Except for performing
1443 optional optimizations one should not rely on this function.
1444
1445 Not all file descriptors may be mapped.  Sockets, pipes, and most devices
1446 only allow sequential access and do not fit into the mapping abstraction.
1447 In addition, some regular files may not be mmapable, and older kernels may
1448 not support mapping at all.  Thus, programs using @code{mmap} should
1449 have a fallback method to use should it fail. @xref{Mmap,,,standards,GNU
1450 Coding Standards}.
1451
1452 @comment sys/mman.h
1453 @comment POSIX
1454 @deftypefun int madvise (void *@var{addr}, size_t @var{length}, int @var{advice})
1455 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1456
1457 This function can be used to provide the system with @var{advice} about
1458 the intended usage patterns of the memory region starting at @var{addr}
1459 and extending @var{length} bytes.
1460
1461 The valid BSD values for @var{advice} are:
1462
1463 @table @code
1464
1465 @item MADV_NORMAL
1466 The region should receive no further special treatment.
1467
1468 @item MADV_RANDOM
1469 The region will be accessed via random page references. The kernel
1470 should page-in the minimal number of pages for each page fault.
1471
1472 @item MADV_SEQUENTIAL
1473 The region will be accessed via sequential page references. This
1474 may cause the kernel to aggressively read-ahead, expecting further
1475 sequential references after any page fault within this region.
1476
1477 @item MADV_WILLNEED
1478 The region will be needed.  The pages within this region may
1479 be pre-faulted in by the kernel.
1480
1481 @item MADV_DONTNEED
1482 The region is no longer needed.  The kernel may free these pages,
1483 causing any changes to the pages to be lost, as well as swapped
1484 out pages to be discarded.
1485
1486 @end table
1487
1488 The POSIX names are slightly different, but with the same meanings:
1489
1490 @table @code
1491
1492 @item POSIX_MADV_NORMAL
1493 This corresponds with BSD's @code{MADV_NORMAL}.
1494
1495 @item POSIX_MADV_RANDOM
1496 This corresponds with BSD's @code{MADV_RANDOM}.
1497
1498 @item POSIX_MADV_SEQUENTIAL
1499 This corresponds with BSD's @code{MADV_SEQUENTIAL}.
1500
1501 @item POSIX_MADV_WILLNEED
1502 This corresponds with BSD's @code{MADV_WILLNEED}.
1503
1504 @item POSIX_MADV_DONTNEED
1505 This corresponds with BSD's @code{MADV_DONTNEED}.
1506
1507 @end table
1508
1509 @code{madvise} returns @math{0} for success and @math{-1} for
1510 error.  Errors include:
1511 @table @code
1512
1513 @item EINVAL
1514 An invalid region was given, or the @var{advice} was invalid.
1515
1516 @item EFAULT
1517 There is no existing mapping in at least part of the given region.
1518
1519 @end table
1520 @end deftypefun
1521
1522 @comment sys/mman.h
1523 @comment POSIX
1524 @deftypefn Function int shm_open (const char *@var{name}, int @var{oflag}, mode_t @var{mode})
1525 @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
1526 @c shm_open @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
1527 @c  libc_once(where_is_shmfs) @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
1528 @c   where_is_shmfs @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd
1529 @c    statfs dup ok
1530 @c    setmntent dup @ascuheap @asulock @acsmem @acsfd @aculock
1531 @c    getmntent_r dup @mtslocale @ascuheap @aculock @acsmem [no @asucorrupt @acucorrupt; exclusive stream]
1532 @c    strcmp dup ok
1533 @c    strlen dup ok
1534 @c    malloc dup @ascuheap @acsmem
1535 @c    mempcpy dup ok
1536 @c    endmntent dup @ascuheap @asulock @aculock @acsmem @acsfd
1537 @c  strlen dup ok
1538 @c  strchr dup ok
1539 @c  mempcpy dup ok
1540 @c  open dup @acsfd
1541 @c  fcntl dup ok
1542 @c  close dup @acsfd
1543
1544 This function returns a file descriptor that can be used to allocate shared
1545 memory via mmap. Unrelated processes can use same @var{name} to create or
1546 open existing shared memory objects.
1547
1548 A @var{name} argument specifies the shared memory object to be opened.
1549 In @theglibc{} it must be a string smaller than @code{NAME_MAX} bytes starting
1550 with an optional slash but containing no other slashes.
1551
1552 The semantics of @var{oflag} and @var{mode} arguments is same as in @code{open}.
1553
1554 @code{shm_open} returns the file descriptor on success or @math{-1} on error.
1555 On failure @code{errno} is set.
1556 @end deftypefn
1557
1558 @deftypefn Function int shm_unlink (const char *@var{name})
1559 @safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
1560 @c shm_unlink @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
1561 @c  libc_once(where_is_shmfs) dup @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd
1562 @c  strlen dup ok
1563 @c  strchr dup ok
1564 @c  mempcpy dup ok
1565 @c  unlink dup ok
1566
1567 This function is inverse of @code{shm_open} and removes the object with
1568 the given @var{name} previously created by @code{shm_open}.
1569
1570 @code{shm_unlink} returns @math{0} on success or @math{-1} on error.
1571 On failure @code{errno} is set.
1572 @end deftypefn
1573
1574 @node Waiting for I/O
1575 @section Waiting for Input or Output
1576 @cindex waiting for input or output
1577 @cindex multiplexing input
1578 @cindex input from multiple files
1579
1580 Sometimes a program needs to accept input on multiple input channels
1581 whenever input arrives.  For example, some workstations may have devices
1582 such as a digitizing tablet, function button box, or dial box that are
1583 connected via normal asynchronous serial interfaces; good user interface
1584 style requires responding immediately to input on any device.  Another
1585 example is a program that acts as a server to several other processes
1586 via pipes or sockets.
1587
1588 You cannot normally use @code{read} for this purpose, because this
1589 blocks the program until input is available on one particular file
1590 descriptor; input on other channels won't wake it up.  You could set
1591 nonblocking mode and poll each file descriptor in turn, but this is very
1592 inefficient.
1593
1594 A better solution is to use the @code{select} function.  This blocks the
1595 program until input or output is ready on a specified set of file
1596 descriptors, or until a timer expires, whichever comes first.  This
1597 facility is declared in the header file @file{sys/types.h}.
1598 @pindex sys/types.h
1599
1600 In the case of a server socket (@pxref{Listening}), we say that
1601 ``input'' is available when there are pending connections that could be
1602 accepted (@pxref{Accepting Connections}).  @code{accept} for server
1603 sockets blocks and interacts with @code{select} just as @code{read} does
1604 for normal input.
1605
1606 @cindex file descriptor sets, for @code{select}
1607 The file descriptor sets for the @code{select} function are specified
1608 as @code{fd_set} objects.  Here is the description of the data type
1609 and some macros for manipulating these objects.
1610
1611 @comment sys/types.h
1612 @comment BSD
1613 @deftp {Data Type} fd_set
1614 The @code{fd_set} data type represents file descriptor sets for the
1615 @code{select} function.  It is actually a bit array.
1616 @end deftp
1617
1618 @comment sys/types.h
1619 @comment BSD
1620 @deftypevr Macro int FD_SETSIZE
1621 The value of this macro is the maximum number of file descriptors that a
1622 @code{fd_set} object can hold information about.  On systems with a
1623 fixed maximum number, @code{FD_SETSIZE} is at least that number.  On
1624 some systems, including GNU, there is no absolute limit on the number of
1625 descriptors open, but this macro still has a constant value which
1626 controls the number of bits in an @code{fd_set}; if you get a file
1627 descriptor with a value as high as @code{FD_SETSIZE}, you cannot put
1628 that descriptor into an @code{fd_set}.
1629 @end deftypevr
1630
1631 @comment sys/types.h
1632 @comment BSD
1633 @deftypefn Macro void FD_ZERO (fd_set *@var{set})
1634 @safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
1635 This macro initializes the file descriptor set @var{set} to be the
1636 empty set.
1637 @end deftypefn
1638
1639 @comment sys/types.h
1640 @comment BSD
1641 @deftypefn Macro void FD_SET (int @var{filedes}, fd_set *@var{set})
1642 @safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
1643 @c Setting a bit isn't necessarily atomic, so there's a potential race
1644 @c here if set is not used exclusively.
1645 This macro adds @var{filedes} to the file descriptor set @var{set}.
1646
1647 The @var{filedes} parameter must not have side effects since it is
1648 evaluated more than once.
1649 @end deftypefn
1650
1651 @comment sys/types.h
1652 @comment BSD
1653 @deftypefn Macro void FD_CLR (int @var{filedes}, fd_set *@var{set})
1654 @safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
1655 @c Setting a bit isn't necessarily atomic, so there's a potential race
1656 @c here if set is not used exclusively.
1657 This macro removes @var{filedes} from the file descriptor set @var{set}.
1658
1659 The @var{filedes} parameter must not have side effects since it is
1660 evaluated more than once.
1661 @end deftypefn
1662
1663 @comment sys/types.h
1664 @comment BSD
1665 @deftypefn Macro int FD_ISSET (int @var{filedes}, const fd_set *@var{set})
1666 @safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}}
1667 This macro returns a nonzero value (true) if @var{filedes} is a member
1668 of the file descriptor set @var{set}, and zero (false) otherwise.
1669
1670 The @var{filedes} parameter must not have side effects since it is
1671 evaluated more than once.
1672 @end deftypefn
1673
1674 Next, here is the description of the @code{select} function itself.
1675
1676 @comment sys/types.h
1677 @comment BSD
1678 @deftypefun int select (int @var{nfds}, fd_set *@var{read-fds}, fd_set *@var{write-fds}, fd_set *@var{except-fds}, struct timeval *@var{timeout})
1679 @safety{@prelim{}@mtsafe{@mtsrace{:read-fds} @mtsrace{:write-fds} @mtsrace{:except-fds}}@assafe{}@acsafe{}}
1680 @c The select syscall is preferred, but pselect6 may be used instead,
1681 @c which requires converting timeout to a timespec and back.  The
1682 @c conversions are not atomic.
1683 The @code{select} function blocks the calling process until there is
1684 activity on any of the specified sets of file descriptors, or until the
1685 timeout period has expired.
1686
1687 The file descriptors specified by the @var{read-fds} argument are
1688 checked to see if they are ready for reading; the @var{write-fds} file
1689 descriptors are checked to see if they are ready for writing; and the
1690 @var{except-fds} file descriptors are checked for exceptional
1691 conditions.  You can pass a null pointer for any of these arguments if
1692 you are not interested in checking for that kind of condition.
1693
1694 A file descriptor is considered ready for reading if a @code{read}
1695 call will not block.  This usually includes the read offset being at
1696 the end of the file or there is an error to report.  A server socket
1697 is considered ready for reading if there is a pending connection which
1698 can be accepted with @code{accept}; @pxref{Accepting Connections}.  A
1699 client socket is ready for writing when its connection is fully
1700 established; @pxref{Connecting}.
1701
1702 ``Exceptional conditions'' does not mean errors---errors are reported
1703 immediately when an erroneous system call is executed, and do not
1704 constitute a state of the descriptor.  Rather, they include conditions
1705 such as the presence of an urgent message on a socket.  (@xref{Sockets},
1706 for information on urgent messages.)
1707
1708 The @code{select} function checks only the first @var{nfds} file
1709 descriptors.  The usual thing is to pass @code{FD_SETSIZE} as the value
1710 of this argument.
1711
1712 The @var{timeout} specifies the maximum time to wait.  If you pass a
1713 null pointer for this argument, it means to block indefinitely until one
1714 of the file descriptors is ready.  Otherwise, you should provide the
1715 time in @code{struct timeval} format; see @ref{High-Resolution
1716 Calendar}.  Specify zero as the time (a @code{struct timeval} containing
1717 all zeros) if you want to find out which descriptors are ready without
1718 waiting if none are ready.
1719
1720 The normal return value from @code{select} is the total number of ready file
1721 descriptors in all of the sets.  Each of the argument sets is overwritten
1722 with information about the descriptors that are ready for the corresponding
1723 operation.  Thus, to see if a particular descriptor @var{desc} has input,
1724 use @code{FD_ISSET (@var{desc}, @var{read-fds})} after @code{select} returns.
1725
1726 If @code{select} returns because the timeout period expires, it returns
1727 a value of zero.
1728
1729 Any signal will cause @code{select} to return immediately.  So if your
1730 program uses signals, you can't rely on @code{select} to keep waiting
1731 for the full time specified.  If you want to be sure of waiting for a
1732 particular amount of time, you must check for @code{EINTR} and repeat
1733 the @code{select} with a newly calculated timeout based on the current
1734 time.  See the example below.  See also @ref{Interrupted Primitives}.
1735
1736 If an error occurs, @code{select} returns @code{-1} and does not modify
1737 the argument file descriptor sets.  The following @code{errno} error
1738 conditions are defined for this function:
1739
1740 @table @code
1741 @item EBADF
1742 One of the file descriptor sets specified an invalid file descriptor.
1743
1744 @item EINTR
1745 The operation was interrupted by a signal.  @xref{Interrupted Primitives}.
1746
1747 @item EINVAL
1748 The @var{timeout} argument is invalid; one of the components is negative
1749 or too large.
1750 @end table
1751 @end deftypefun
1752
1753 @strong{Portability Note:}  The @code{select} function is a BSD Unix
1754 feature.
1755
1756 Here is an example showing how you can use @code{select} to establish a
1757 timeout period for reading from a file descriptor.  The @code{input_timeout}
1758 function blocks the calling process until input is available on the
1759 file descriptor, or until the timeout period expires.
1760
1761 @smallexample
1762 @include select.c.texi
1763 @end smallexample
1764
1765 There is another example showing the use of @code{select} to multiplex
1766 input from multiple sockets in @ref{Server Example}.
1767
1768
1769 @node Synchronizing I/O
1770 @section Synchronizing I/O operations
1771
1772 @cindex synchronizing
1773 In most modern operating systems, the normal I/O operations are not
1774 executed synchronously.  I.e., even if a @code{write} system call
1775 returns, this does not mean the data is actually written to the media,
1776 e.g., the disk.
1777
1778 In situations where synchronization points are necessary, you can use
1779 special functions which ensure that all operations finish before
1780 they return.
1781
1782 @comment unistd.h
1783 @comment X/Open
1784 @deftypefun void sync (void)
1785 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1786 A call to this function will not return as long as there is data which
1787 has not been written to the device.  All dirty buffers in the kernel will
1788 be written and so an overall consistent system can be achieved (if no
1789 other process in parallel writes data).
1790
1791 A prototype for @code{sync} can be found in @file{unistd.h}.
1792 @end deftypefun
1793
1794 Programs more often want to ensure that data written to a given file is
1795 committed, rather than all data in the system.  For this, @code{sync} is overkill.
1796
1797
1798 @comment unistd.h
1799 @comment POSIX
1800 @deftypefun int fsync (int @var{fildes})
1801 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1802 The @code{fsync} function can be used to make sure all data associated with
1803 the open file @var{fildes} is written to the device associated with the
1804 descriptor.  The function call does not return unless all actions have
1805 finished.
1806
1807 A prototype for @code{fsync} can be found in @file{unistd.h}.
1808
1809 This function is a cancellation point in multi-threaded programs.  This
1810 is a problem if the thread allocates some resources (like memory, file
1811 descriptors, semaphores or whatever) at the time @code{fsync} is
1812 called.  If the thread gets canceled these resources stay allocated
1813 until the program ends.  To avoid this, calls to @code{fsync} should be
1814 protected using cancellation handlers.
1815 @c ref pthread_cleanup_push / pthread_cleanup_pop
1816
1817 The return value of the function is zero if no error occurred.  Otherwise
1818 it is @math{-1} and the global variable @var{errno} is set to the
1819 following values:
1820 @table @code
1821 @item EBADF
1822 The descriptor @var{fildes} is not valid.
1823
1824 @item EINVAL
1825 No synchronization is possible since the system does not implement this.
1826 @end table
1827 @end deftypefun
1828
1829 Sometimes it is not even necessary to write all data associated with a
1830 file descriptor.  E.g., in database files which do not change in size it
1831 is enough to write all the file content data to the device.
1832 Meta-information, like the modification time etc., are not that important
1833 and leaving such information uncommitted does not prevent a successful
1834 recovering of the file in case of a problem.
1835
1836 @comment unistd.h
1837 @comment POSIX
1838 @deftypefun int fdatasync (int @var{fildes})
1839 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
1840 When a call to the @code{fdatasync} function returns, it is ensured
1841 that all of the file data is written to the device.  For all pending I/O
1842 operations, the parts guaranteeing data integrity finished.
1843
1844 Not all systems implement the @code{fdatasync} operation.  On systems
1845 missing this functionality @code{fdatasync} is emulated by a call to
1846 @code{fsync} since the performed actions are a superset of those
1847 required by @code{fdatasync}.
1848
1849 The prototype for @code{fdatasync} is in @file{unistd.h}.
1850
1851 The return value of the function is zero if no error occurred.  Otherwise
1852 it is @math{-1} and the global variable @var{errno} is set to the
1853 following values:
1854 @table @code
1855 @item EBADF
1856 The descriptor @var{fildes} is not valid.
1857
1858 @item EINVAL
1859 No synchronization is possible since the system does not implement this.
1860 @end table
1861 @end deftypefun
1862
1863
1864 @node Asynchronous I/O
1865 @section Perform I/O Operations in Parallel
1866
1867 The POSIX.1b standard defines a new set of I/O operations which can
1868 significantly reduce the time an application spends waiting at I/O.  The
1869 new functions allow a program to initiate one or more I/O operations and
1870 then immediately resume normal work while the I/O operations are
1871 executed in parallel.  This functionality is available if the
1872 @file{unistd.h} file defines the symbol @code{_POSIX_ASYNCHRONOUS_IO}.
1873
1874 These functions are part of the library with realtime functions named
1875 @file{librt}.  They are not actually part of the @file{libc} binary.
1876 The implementation of these functions can be done using support in the
1877 kernel (if available) or using an implementation based on threads at
1878 userlevel.  In the latter case it might be necessary to link applications
1879 with the thread library @file{libpthread} in addition to @file{librt}.
1880
1881 All AIO operations operate on files which were opened previously.  There
1882 might be arbitrarily many operations running for one file.  The
1883 asynchronous I/O operations are controlled using a data structure named
1884 @code{struct aiocb} (@dfn{AIO control block}).  It is defined in
1885 @file{aio.h} as follows.
1886
1887 @comment aio.h
1888 @comment POSIX.1b
1889 @deftp {Data Type} {struct aiocb}
1890 The POSIX.1b standard mandates that the @code{struct aiocb} structure
1891 contains at least the members described in the following table.  There
1892 might be more elements which are used by the implementation, but
1893 depending upon these elements is not portable and is highly deprecated.
1894
1895 @table @code
1896 @item int aio_fildes
1897 This element specifies the file descriptor to be used for the
1898 operation.  It must be a legal descriptor, otherwise the operation will
1899 fail.
1900
1901 The device on which the file is opened must allow the seek operation.
1902 I.e., it is not possible to use any of the AIO operations on devices
1903 like terminals where an @code{lseek} call would lead to an error.
1904
1905 @item off_t aio_offset
1906 This element specifies the offset in the file at which the operation (input
1907 or output) is performed.  Since the operations are carried out in arbitrary
1908 order and more than one operation for one file descriptor can be
1909 started, one cannot expect a current read/write position of the file
1910 descriptor.
1911
1912 @item volatile void *aio_buf
1913 This is a pointer to the buffer with the data to be written or the place
1914 where the read data is stored.
1915
1916 @item size_t aio_nbytes
1917 This element specifies the length of the buffer pointed to by @code{aio_buf}.
1918
1919 @item int aio_reqprio
1920 If the platform has defined @code{_POSIX_PRIORITIZED_IO} and
1921 @code{_POSIX_PRIORITY_SCHEDULING}, the AIO requests are
1922 processed based on the current scheduling priority.  The
1923 @code{aio_reqprio} element can then be used to lower the priority of the
1924 AIO operation.
1925
1926 @item struct sigevent aio_sigevent
1927 This element specifies how the calling process is notified once the
1928 operation terminates.  If the @code{sigev_notify} element is
1929 @code{SIGEV_NONE}, no notification is sent.  If it is @code{SIGEV_SIGNAL},
1930 the signal determined by @code{sigev_signo} is sent.  Otherwise,
1931 @code{sigev_notify} must be @code{SIGEV_THREAD}.  In this case, a thread
1932 is created which starts executing the function pointed to by
1933 @code{sigev_notify_function}.
1934
1935 @item int aio_lio_opcode
1936 This element is only used by the @code{lio_listio} and
1937 @code{lio_listio64} functions.  Since these functions allow an
1938 arbitrary number of operations to start at once, and each operation can be
1939 input or output (or nothing), the information must be stored in the
1940 control block.  The possible values are:
1941
1942 @vtable @code
1943 @item LIO_READ
1944 Start a read operation.  Read from the file at position
1945 @code{aio_offset} and store the next @code{aio_nbytes} bytes in the
1946 buffer pointed to by @code{aio_buf}.
1947
1948 @item LIO_WRITE
1949 Start a write operation.  Write @code{aio_nbytes} bytes starting at
1950 @code{aio_buf} into the file starting at position @code{aio_offset}.
1951
1952 @item LIO_NOP
1953 Do nothing for this control block.  This value is useful sometimes when
1954 an array of @code{struct aiocb} values contains holes, i.e., some of the
1955 values must not be handled although the whole array is presented to the
1956 @code{lio_listio} function.
1957 @end vtable
1958 @end table
1959
1960 When the sources are compiled using @code{_FILE_OFFSET_BITS == 64} on a
1961 32 bit machine, this type is in fact @code{struct aiocb64}, since the LFS
1962 interface transparently replaces the @code{struct aiocb} definition.
1963 @end deftp
1964
1965 For use with the AIO functions defined in the LFS, there is a similar type
1966 defined which replaces the types of the appropriate members with larger
1967 types but otherwise is equivalent to @code{struct aiocb}.  Particularly,
1968 all member names are the same.
1969
1970 @comment aio.h
1971 @comment POSIX.1b
1972 @deftp {Data Type} {struct aiocb64}
1973 @table @code
1974 @item int aio_fildes
1975 This element specifies the file descriptor which is used for the
1976 operation.  It must be a legal descriptor since otherwise the operation
1977 fails for obvious reasons.
1978
1979 The device on which the file is opened must allow the seek operation.
1980 I.e., it is not possible to use any of the AIO operations on devices
1981 like terminals where an @code{lseek} call would lead to an error.
1982
1983 @item off64_t aio_offset
1984 This element specifies at which offset in the file the operation (input
1985 or output) is performed.  Since the operation are carried in arbitrary
1986 order and more than one operation for one file descriptor can be
1987 started, one cannot expect a current read/write position of the file
1988 descriptor.
1989
1990 @item volatile void *aio_buf
1991 This is a pointer to the buffer with the data to be written or the place
1992 where the read data is stored.
1993
1994 @item size_t aio_nbytes
1995 This element specifies the length of the buffer pointed to by @code{aio_buf}.
1996
1997 @item int aio_reqprio
1998 If for the platform @code{_POSIX_PRIORITIZED_IO} and
1999 @code{_POSIX_PRIORITY_SCHEDULING} are defined the AIO requests are
2000 processed based on the current scheduling priority.  The
2001 @code{aio_reqprio} element can then be used to lower the priority of the
2002 AIO operation.
2003
2004 @item struct sigevent aio_sigevent
2005 This element specifies how the calling process is notified once the
2006 operation terminates.  If the @code{sigev_notify}, element is
2007 @code{SIGEV_NONE} no notification is sent.  If it is @code{SIGEV_SIGNAL},
2008 the signal determined by @code{sigev_signo} is sent.  Otherwise,
2009 @code{sigev_notify} must be @code{SIGEV_THREAD} in which case a thread
2010 which starts executing the function pointed to by
2011 @code{sigev_notify_function}.
2012
2013 @item int aio_lio_opcode
2014 This element is only used by the @code{lio_listio} and
2015 @code{[lio_listio64} functions.  Since these functions allow an
2016 arbitrary number of operations to start at once, and since each operation can be
2017 input or output (or nothing), the information must be stored in the
2018 control block.  See the description of @code{struct aiocb} for a description
2019 of the possible values.
2020 @end table
2021
2022 When the sources are compiled using @code{_FILE_OFFSET_BITS == 64} on a
2023 32 bit machine, this type is available under the name @code{struct
2024 aiocb64}, since the LFS transparently replaces the old interface.
2025 @end deftp
2026
2027 @menu
2028 * Asynchronous Reads/Writes::    Asynchronous Read and Write Operations.
2029 * Status of AIO Operations::     Getting the Status of AIO Operations.
2030 * Synchronizing AIO Operations:: Getting into a consistent state.
2031 * Cancel AIO Operations::        Cancellation of AIO Operations.
2032 * Configuration of AIO::         How to optimize the AIO implementation.
2033 @end menu
2034
2035 @node Asynchronous Reads/Writes
2036 @subsection Asynchronous Read and Write Operations
2037
2038 @comment aio.h
2039 @comment POSIX.1b
2040 @deftypefun int aio_read (struct aiocb *@var{aiocbp})
2041 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2042 @c Calls aio_enqueue_request.
2043 @c aio_enqueue_request @asulock @ascuheap @aculock @acsmem
2044 @c  pthread_self ok
2045 @c  pthread_getschedparam @asulock @aculock
2046 @c   lll_lock (pthread descriptor's lock) @asulock @aculock
2047 @c   sched_getparam ok
2048 @c   sched_getscheduler ok
2049 @c   lll_unlock @aculock
2050 @c  pthread_mutex_lock (aio_requests_mutex) @asulock @aculock
2051 @c  get_elem @ascuheap @acsmem [@asucorrupt @acucorrupt]
2052 @c   realloc @ascuheap @acsmem
2053 @c   calloc @ascuheap @acsmem
2054 @c  aio_create_helper_thread @asulock @ascuheap @aculock @acsmem
2055 @c   pthread_attr_init ok
2056 @c   pthread_attr_setdetachstate ok
2057 @c   pthread_get_minstack ok
2058 @c   pthread_attr_setstacksize ok
2059 @c   sigfillset ok
2060 @c    memset ok
2061 @c    sigdelset ok
2062 @c   SYSCALL rt_sigprocmask ok
2063 @c   pthread_create @asulock @ascuheap @aculock @acsmem
2064 @c    lll_lock (default_pthread_attr_lock) @asulock @aculock
2065 @c    alloca/malloc @ascuheap @acsmem
2066 @c    lll_unlock @aculock
2067 @c    allocate_stack @asulock @ascuheap @aculock @acsmem
2068 @c     getpagesize dup
2069 @c     lll_lock (default_pthread_attr_lock) @asulock @aculock
2070 @c     lll_unlock @aculock
2071 @c     _dl_allocate_tls @ascuheap @acsmem
2072 @c      _dl_allocate_tls_storage @ascuheap @acsmem
2073 @c       memalign @ascuheap @acsmem
2074 @c       memset ok
2075 @c       allocate_dtv dup
2076 @c       free @ascuheap @acsmem
2077 @c      allocate_dtv @ascuheap @acsmem
2078 @c       calloc @ascuheap @acsmem
2079 @c       INSTALL_DTV ok
2080 @c     list_add dup
2081 @c     get_cached_stack
2082 @c      lll_lock (stack_cache_lock) @asulock @aculock
2083 @c      list_for_each ok
2084 @c      list_entry dup
2085 @c      FREE_P dup
2086 @c      stack_list_del dup
2087 @c      stack_list_add dup
2088 @c      lll_unlock @aculock
2089 @c      _dl_allocate_tls_init ok
2090 @c       GET_DTV ok
2091 @c     mmap ok
2092 @c     atomic_increment_val ok
2093 @c     munmap ok
2094 @c     change_stack_perm ok
2095 @c      mprotect ok
2096 @c     mprotect ok
2097 @c     stack_list_del dup
2098 @c     _dl_deallocate_tls dup
2099 @c     munmap ok
2100 @c    THREAD_COPY_STACK_GUARD ok
2101 @c    THREAD_COPY_POINTER_GUARD ok
2102 @c    atomic_exchange_acq ok
2103 @c    lll_futex_wake ok
2104 @c    deallocate_stack @asulock @ascuheap @aculock @acsmem
2105 @c     lll_lock (state_cache_lock) @asulock @aculock
2106 @c     stack_list_del ok
2107 @c      atomic_write_barrier ok
2108 @c      list_del ok
2109 @c      atomic_write_barrier ok
2110 @c     queue_stack @ascuheap @acsmem
2111 @c      stack_list_add ok
2112 @c       atomic_write_barrier ok
2113 @c       list_add ok
2114 @c       atomic_write_barrier ok
2115 @c      free_stacks @ascuheap @acsmem
2116 @c       list_for_each_prev_safe ok
2117 @c       list_entry ok
2118 @c       FREE_P ok
2119 @c       stack_list_del dup
2120 @c       _dl_deallocate_tls dup
2121 @c       munmap ok
2122 @c     _dl_deallocate_tls @ascuheap @acsmem
2123 @c      free @ascuheap @acsmem
2124 @c     lll_unlock @aculock
2125 @c    create_thread @asulock @ascuheap @aculock @acsmem
2126 @c     td_eventword
2127 @c     td_eventmask
2128 @c     do_clone @asulock @ascuheap @aculock @acsmem
2129 @c      PREPARE_CREATE ok
2130 @c      lll_lock (pd->lock) @asulock @aculock
2131 @c      atomic_increment ok
2132 @c      clone ok
2133 @c      atomic_decrement ok
2134 @c      atomic_exchange_acq ok
2135 @c      lll_futex_wake ok
2136 @c      deallocate_stack dup
2137 @c      sched_setaffinity ok
2138 @c      tgkill ok
2139 @c      sched_setscheduler ok
2140 @c     atomic_compare_and_exchange_bool_acq ok
2141 @c     nptl_create_event ok
2142 @c     lll_unlock (pd->lock) @aculock
2143 @c    free @ascuheap @acsmem
2144 @c   pthread_attr_destroy ok (cpuset won't be set, so free isn't called)
2145 @c  add_request_to_runlist ok
2146 @c  pthread_cond_signal ok
2147 @c  aio_free_request ok
2148 @c  pthread_mutex_unlock @aculock
2149
2150 @c (in the new thread, initiated with clone)
2151 @c    start_thread ok
2152 @c     HP_TIMING_NOW ok
2153 @c     ctype_init @mtslocale
2154 @c     atomic_exchange_acq ok
2155 @c     lll_futex_wake ok
2156 @c     sigemptyset ok
2157 @c     sigaddset ok
2158 @c     setjmp ok
2159 @c     CANCEL_ASYNC -> pthread_enable_asynccancel ok
2160 @c      do_cancel ok
2161 @c       pthread_unwind ok
2162 @c        Unwind_ForcedUnwind or longjmp ok [@ascuheap @acsmem?]
2163 @c     lll_lock @asulock @aculock
2164 @c     lll_unlock @asulock @aculock
2165 @c     CANCEL_RESET -> pthread_disable_asynccancel ok
2166 @c      lll_futex_wait ok
2167 @c     ->start_routine ok -----
2168 @c     call_tls_dtors @asulock @ascuheap @aculock @acsmem
2169 @c      user-supplied dtor
2170 @c      rtld_lock_lock_recursive (dl_load_lock) @asulock @aculock
2171 @c      rtld_lock_unlock_recursive @aculock
2172 @c      free @ascuheap @acsmem
2173 @c     nptl_deallocate_tsd @ascuheap @acsmem
2174 @c      tsd user-supplied dtors ok
2175 @c      free @ascuheap @acsmem
2176 @c     libc_thread_freeres
2177 @c      libc_thread_subfreeres ok
2178 @c     atomic_decrement_and_test ok
2179 @c     td_eventword ok
2180 @c     td_eventmask ok
2181 @c     atomic_compare_exchange_bool_acq ok
2182 @c     nptl_death_event ok
2183 @c     lll_robust_dead ok
2184 @c     getpagesize ok
2185 @c     madvise ok
2186 @c     free_tcb @asulock @ascuheap @aculock @acsmem
2187 @c      free @ascuheap @acsmem
2188 @c      deallocate_stack @asulock @ascuheap @aculock @acsmem
2189 @c     lll_futex_wait ok
2190 @c     exit_thread_inline ok
2191 @c      syscall(exit) ok
2192
2193 This function initiates an asynchronous read operation.  It
2194 immediately returns after the operation was enqueued or when an
2195 error was encountered.
2196
2197 The first @code{aiocbp->aio_nbytes} bytes of the file for which
2198 @code{aiocbp->aio_fildes} is a descriptor are written to the buffer
2199 starting at @code{aiocbp->aio_buf}.  Reading starts at the absolute
2200 position @code{aiocbp->aio_offset} in the file.
2201
2202 If prioritized I/O is supported by the platform the
2203 @code{aiocbp->aio_reqprio} value is used to adjust the priority before
2204 the request is actually enqueued.
2205
2206 The calling process is notified about the termination of the read
2207 request according to the @code{aiocbp->aio_sigevent} value.
2208
2209 When @code{aio_read} returns, the return value is zero if no error
2210 occurred that can be found before the process is enqueued.  If such an
2211 early error is found, the function returns @math{-1} and sets
2212 @code{errno} to one of the following values:
2213
2214 @table @code
2215 @item EAGAIN
2216 The request was not enqueued due to (temporarily) exceeded resource
2217 limitations.
2218 @item ENOSYS
2219 The @code{aio_read} function is not implemented.
2220 @item EBADF
2221 The @code{aiocbp->aio_fildes} descriptor is not valid.  This condition
2222 need not be recognized before enqueueing the request and so this error
2223 might also be signaled asynchronously.
2224 @item EINVAL
2225 The @code{aiocbp->aio_offset} or @code{aiocbp->aio_reqpiro} value is
2226 invalid.  This condition need not be recognized before enqueueing the
2227 request and so this error might also be signaled asynchronously.
2228 @end table
2229
2230 If @code{aio_read} returns zero, the current status of the request
2231 can be queried using @code{aio_error} and @code{aio_return} functions.
2232 As long as the value returned by @code{aio_error} is @code{EINPROGRESS}
2233 the operation has not yet completed.  If @code{aio_error} returns zero,
2234 the operation successfully terminated, otherwise the value is to be
2235 interpreted as an error code.  If the function terminated, the result of
2236 the operation can be obtained using a call to @code{aio_return}.  The
2237 returned value is the same as an equivalent call to @code{read} would
2238 have returned.  Possible error codes returned by @code{aio_error} are:
2239
2240 @table @code
2241 @item EBADF
2242 The @code{aiocbp->aio_fildes} descriptor is not valid.
2243 @item ECANCELED
2244 The operation was canceled before the operation was finished
2245 (@pxref{Cancel AIO Operations})
2246 @item EINVAL
2247 The @code{aiocbp->aio_offset} value is invalid.
2248 @end table
2249
2250 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2251 function is in fact @code{aio_read64} since the LFS interface transparently
2252 replaces the normal implementation.
2253 @end deftypefun
2254
2255 @comment aio.h
2256 @comment Unix98
2257 @deftypefun int aio_read64 (struct aiocb64 *@var{aiocbp})
2258 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2259 This function is similar to the @code{aio_read} function.  The only
2260 difference is that on @w{32 bit} machines, the file descriptor should
2261 be opened in the large file mode.  Internally, @code{aio_read64} uses
2262 functionality equivalent to @code{lseek64} (@pxref{File Position
2263 Primitive}) to position the file descriptor correctly for the reading,
2264 as opposed to @code{lseek} functionality used in @code{aio_read}.
2265
2266 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64}, this
2267 function is available under the name @code{aio_read} and so transparently
2268 replaces the interface for small files on 32 bit machines.
2269 @end deftypefun
2270
2271 To write data asynchronously to a file, there exists an equivalent pair
2272 of functions with a very similar interface.
2273
2274 @comment aio.h
2275 @comment POSIX.1b
2276 @deftypefun int aio_write (struct aiocb *@var{aiocbp})
2277 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2278 This function initiates an asynchronous write operation.  The function
2279 call immediately returns after the operation was enqueued or if before
2280 this happens an error was encountered.
2281
2282 The first @code{aiocbp->aio_nbytes} bytes from the buffer starting at
2283 @code{aiocbp->aio_buf} are written to the file for which
2284 @code{aiocbp->aio_fildes} is a descriptor, starting at the absolute
2285 position @code{aiocbp->aio_offset} in the file.
2286
2287 If prioritized I/O is supported by the platform, the
2288 @code{aiocbp->aio_reqprio} value is used to adjust the priority before
2289 the request is actually enqueued.
2290
2291 The calling process is notified about the termination of the read
2292 request according to the @code{aiocbp->aio_sigevent} value.
2293
2294 When @code{aio_write} returns, the return value is zero if no error
2295 occurred that can be found before the process is enqueued.  If such an
2296 early error is found the function returns @math{-1} and sets
2297 @code{errno} to one of the following values.
2298
2299 @table @code
2300 @item EAGAIN
2301 The request was not enqueued due to (temporarily) exceeded resource
2302 limitations.
2303 @item ENOSYS
2304 The @code{aio_write} function is not implemented.
2305 @item EBADF
2306 The @code{aiocbp->aio_fildes} descriptor is not valid.  This condition
2307 may not be recognized before enqueueing the request, and so this error
2308 might also be signaled asynchronously.
2309 @item EINVAL
2310 The @code{aiocbp->aio_offset} or @code{aiocbp->aio_reqprio} value is
2311 invalid.  This condition may not be recognized before enqueueing the
2312 request and so this error might also be signaled asynchronously.
2313 @end table
2314
2315 In the case @code{aio_write} returns zero, the current status of the
2316 request can be queried using @code{aio_error} and @code{aio_return}
2317 functions.  As long as the value returned by @code{aio_error} is
2318 @code{EINPROGRESS} the operation has not yet completed.  If
2319 @code{aio_error} returns zero, the operation successfully terminated,
2320 otherwise the value is to be interpreted as an error code.  If the
2321 function terminated, the result of the operation can be get using a call
2322 to @code{aio_return}.  The returned value is the same as an equivalent
2323 call to @code{read} would have returned.  Possible error codes returned
2324 by @code{aio_error} are:
2325
2326 @table @code
2327 @item EBADF
2328 The @code{aiocbp->aio_fildes} descriptor is not valid.
2329 @item ECANCELED
2330 The operation was canceled before the operation was finished.
2331 (@pxref{Cancel AIO Operations})
2332 @item EINVAL
2333 The @code{aiocbp->aio_offset} value is invalid.
2334 @end table
2335
2336 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64}, this
2337 function is in fact @code{aio_write64} since the LFS interface transparently
2338 replaces the normal implementation.
2339 @end deftypefun
2340
2341 @comment aio.h
2342 @comment Unix98
2343 @deftypefun int aio_write64 (struct aiocb64 *@var{aiocbp})
2344 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2345 This function is similar to the @code{aio_write} function.  The only
2346 difference is that on @w{32 bit} machines the file descriptor should
2347 be opened in the large file mode.  Internally @code{aio_write64} uses
2348 functionality equivalent to @code{lseek64} (@pxref{File Position
2349 Primitive}) to position the file descriptor correctly for the writing,
2350 as opposed to @code{lseek} functionality used in @code{aio_write}.
2351
2352 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64}, this
2353 function is available under the name @code{aio_write} and so transparently
2354 replaces the interface for small files on 32 bit machines.
2355 @end deftypefun
2356
2357 Besides these functions with the more or less traditional interface,
2358 POSIX.1b also defines a function which can initiate more than one
2359 operation at a time, and which can handle freely mixed read and write
2360 operations.  It is therefore similar to a combination of @code{readv} and
2361 @code{writev}.
2362
2363 @comment aio.h
2364 @comment POSIX.1b
2365 @deftypefun int lio_listio (int @var{mode}, struct aiocb *const @var{list}[], int @var{nent}, struct sigevent *@var{sig})
2366 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2367 @c Call lio_listio_internal, that takes the aio_requests_mutex lock and
2368 @c enqueues each request.  Then, it waits for notification or prepares
2369 @c for it before releasing the lock.  Even though it performs memory
2370 @c allocation and locking of its own, it doesn't add any classes of
2371 @c safety issues that aren't already covered by aio_enqueue_request.
2372 The @code{lio_listio} function can be used to enqueue an arbitrary
2373 number of read and write requests at one time.  The requests can all be
2374 meant for the same file, all for different files or every solution in
2375 between.
2376
2377 @code{lio_listio} gets the @var{nent} requests from the array pointed to
2378 by @var{list}.  The operation to be performed is determined by the
2379 @code{aio_lio_opcode} member in each element of @var{list}.  If this
2380 field is @code{LIO_READ} a read operation is enqueued, similar to a call
2381 of @code{aio_read} for this element of the array (except that the way
2382 the termination is signalled is different, as we will see below).  If
2383 the @code{aio_lio_opcode} member is @code{LIO_WRITE} a write operation
2384 is enqueued.  Otherwise the @code{aio_lio_opcode} must be @code{LIO_NOP}
2385 in which case this element of @var{list} is simply ignored.  This
2386 ``operation'' is useful in situations where one has a fixed array of
2387 @code{struct aiocb} elements from which only a few need to be handled at
2388 a time.  Another situation is where the @code{lio_listio} call was
2389 canceled before all requests are processed (@pxref{Cancel AIO
2390 Operations}) and the remaining requests have to be reissued.
2391
2392 The other members of each element of the array pointed to by
2393 @code{list} must have values suitable for the operation as described in
2394 the documentation for @code{aio_read} and @code{aio_write} above.
2395
2396 The @var{mode} argument determines how @code{lio_listio} behaves after
2397 having enqueued all the requests.  If @var{mode} is @code{LIO_WAIT} it
2398 waits until all requests terminated.  Otherwise @var{mode} must be
2399 @code{LIO_NOWAIT} and in this case the function returns immediately after
2400 having enqueued all the requests.  In this case the caller gets a
2401 notification of the termination of all requests according to the
2402 @var{sig} parameter.  If @var{sig} is @code{NULL} no notification is
2403 send.  Otherwise a signal is sent or a thread is started, just as
2404 described in the description for @code{aio_read} or @code{aio_write}.
2405
2406 If @var{mode} is @code{LIO_WAIT}, the return value of @code{lio_listio}
2407 is @math{0} when all requests completed successfully.  Otherwise the
2408 function return @math{-1} and @code{errno} is set accordingly.  To find
2409 out which request or requests failed one has to use the @code{aio_error}
2410 function on all the elements of the array @var{list}.
2411
2412 In case @var{mode} is @code{LIO_NOWAIT}, the function returns @math{0} if
2413 all requests were enqueued correctly.  The current state of the requests
2414 can be found using @code{aio_error} and @code{aio_return} as described
2415 above.  If @code{lio_listio} returns @math{-1} in this mode, the
2416 global variable @code{errno} is set accordingly.  If a request did not
2417 yet terminate, a call to @code{aio_error} returns @code{EINPROGRESS}.  If
2418 the value is different, the request is finished and the error value (or
2419 @math{0}) is returned and the result of the operation can be retrieved
2420 using @code{aio_return}.
2421
2422 Possible values for @code{errno} are:
2423
2424 @table @code
2425 @item EAGAIN
2426 The resources necessary to queue all the requests are not available at
2427 the moment.  The error status for each element of @var{list} must be
2428 checked to determine which request failed.
2429
2430 Another reason could be that the system wide limit of AIO requests is
2431 exceeded.  This cannot be the case for the implementation on @gnusystems{}
2432 since no arbitrary limits exist.
2433 @item EINVAL
2434 The @var{mode} parameter is invalid or @var{nent} is larger than
2435 @code{AIO_LISTIO_MAX}.
2436 @item EIO
2437 One or more of the request's I/O operations failed.  The error status of
2438 each request should be checked to determine which one failed.
2439 @item ENOSYS
2440 The @code{lio_listio} function is not supported.
2441 @end table
2442
2443 If the @var{mode} parameter is @code{LIO_NOWAIT} and the caller cancels
2444 a request, the error status for this request returned by
2445 @code{aio_error} is @code{ECANCELED}.
2446
2447 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64}, this
2448 function is in fact @code{lio_listio64} since the LFS interface
2449 transparently replaces the normal implementation.
2450 @end deftypefun
2451
2452 @comment aio.h
2453 @comment Unix98
2454 @deftypefun int lio_listio64 (int @var{mode}, struct aiocb64 *const @var{list}[], int @var{nent}, struct sigevent *@var{sig})
2455 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2456 This function is similar to the @code{lio_listio} function.  The only
2457 difference is that on @w{32 bit} machines, the file descriptor should
2458 be opened in the large file mode.  Internally, @code{lio_listio64} uses
2459 functionality equivalent to @code{lseek64} (@pxref{File Position
2460 Primitive}) to position the file descriptor correctly for the reading or
2461 writing, as opposed to @code{lseek} functionality used in
2462 @code{lio_listio}.
2463
2464 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64}, this
2465 function is available under the name @code{lio_listio} and so
2466 transparently replaces the interface for small files on 32 bit
2467 machines.
2468 @end deftypefun
2469
2470 @node Status of AIO Operations
2471 @subsection Getting the Status of AIO Operations
2472
2473 As already described in the documentation of the functions in the last
2474 section, it must be possible to get information about the status of an I/O
2475 request.  When the operation is performed truly asynchronously (as with
2476 @code{aio_read} and @code{aio_write} and with @code{lio_listio} when the
2477 mode is @code{LIO_NOWAIT}), one sometimes needs to know whether a
2478 specific request already terminated and if so, what the result was.
2479 The following two functions allow you to get this kind of information.
2480
2481 @comment aio.h
2482 @comment POSIX.1b
2483 @deftypefun int aio_error (const struct aiocb *@var{aiocbp})
2484 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2485 This function determines the error state of the request described by the
2486 @code{struct aiocb} variable pointed to by @var{aiocbp}.  If the
2487 request has not yet terminated the value returned is always
2488 @code{EINPROGRESS}.  Once the request has terminated the value
2489 @code{aio_error} returns is either @math{0} if the request completed
2490 successfully or it returns the value which would be stored in the
2491 @code{errno} variable if the request would have been done using
2492 @code{read}, @code{write}, or @code{fsync}.
2493
2494 The function can return @code{ENOSYS} if it is not implemented.  It
2495 could also return @code{EINVAL} if the @var{aiocbp} parameter does not
2496 refer to an asynchronous operation whose return status is not yet known.
2497
2498 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2499 function is in fact @code{aio_error64} since the LFS interface
2500 transparently replaces the normal implementation.
2501 @end deftypefun
2502
2503 @comment aio.h
2504 @comment Unix98
2505 @deftypefun int aio_error64 (const struct aiocb64 *@var{aiocbp})
2506 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2507 This function is similar to @code{aio_error} with the only difference
2508 that the argument is a reference to a variable of type @code{struct
2509 aiocb64}.
2510
2511 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2512 function is available under the name @code{aio_error} and so
2513 transparently replaces the interface for small files on 32 bit
2514 machines.
2515 @end deftypefun
2516
2517 @comment aio.h
2518 @comment POSIX.1b
2519 @deftypefun ssize_t aio_return (struct aiocb *@var{aiocbp})
2520 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2521 This function can be used to retrieve the return status of the operation
2522 carried out by the request described in the variable pointed to by
2523 @var{aiocbp}.  As long as the error status of this request as returned
2524 by @code{aio_error} is @code{EINPROGRESS} the return of this function is
2525 undefined.
2526
2527 Once the request is finished this function can be used exactly once to
2528 retrieve the return value.  Following calls might lead to undefined
2529 behavior.  The return value itself is the value which would have been
2530 returned by the @code{read}, @code{write}, or @code{fsync} call.
2531
2532 The function can return @code{ENOSYS} if it is not implemented.  It
2533 could also return @code{EINVAL} if the @var{aiocbp} parameter does not
2534 refer to an asynchronous operation whose return status is not yet known.
2535
2536 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2537 function is in fact @code{aio_return64} since the LFS interface
2538 transparently replaces the normal implementation.
2539 @end deftypefun
2540
2541 @comment aio.h
2542 @comment Unix98
2543 @deftypefun ssize_t aio_return64 (struct aiocb64 *@var{aiocbp})
2544 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2545 This function is similar to @code{aio_return} with the only difference
2546 that the argument is a reference to a variable of type @code{struct
2547 aiocb64}.
2548
2549 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2550 function is available under the name @code{aio_return} and so
2551 transparently replaces the interface for small files on 32 bit
2552 machines.
2553 @end deftypefun
2554
2555 @node Synchronizing AIO Operations
2556 @subsection Getting into a Consistent State
2557
2558 When dealing with asynchronous operations it is sometimes necessary to
2559 get into a consistent state.  This would mean for AIO that one wants to
2560 know whether a certain request or a group of request were processed.
2561 This could be done by waiting for the notification sent by the system
2562 after the operation terminated, but this sometimes would mean wasting
2563 resources (mainly computation time).  Instead POSIX.1b defines two
2564 functions which will help with most kinds of consistency.
2565
2566 The @code{aio_fsync} and @code{aio_fsync64} functions are only available
2567 if the symbol @code{_POSIX_SYNCHRONIZED_IO} is defined in @file{unistd.h}.
2568
2569 @cindex synchronizing
2570 @comment aio.h
2571 @comment POSIX.1b
2572 @deftypefun int aio_fsync (int @var{op}, struct aiocb *@var{aiocbp})
2573 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2574 @c After fcntl to check that the FD is open, it calls
2575 @c aio_enqueue_request.
2576 Calling this function forces all I/O operations operating queued at the
2577 time of the function call operating on the file descriptor
2578 @code{aiocbp->aio_fildes} into the synchronized I/O completion state
2579 (@pxref{Synchronizing I/O}).  The @code{aio_fsync} function returns
2580 immediately but the notification through the method described in
2581 @code{aiocbp->aio_sigevent} will happen only after all requests for this
2582 file descriptor have terminated and the file is synchronized.  This also
2583 means that requests for this very same file descriptor which are queued
2584 after the synchronization request are not affected.
2585
2586 If @var{op} is @code{O_DSYNC} the synchronization happens as with a call
2587 to @code{fdatasync}.  Otherwise @var{op} should be @code{O_SYNC} and
2588 the synchronization happens as with @code{fsync}.
2589
2590 As long as the synchronization has not happened, a call to
2591 @code{aio_error} with the reference to the object pointed to by
2592 @var{aiocbp} returns @code{EINPROGRESS}.  Once the synchronization is
2593 done @code{aio_error} return @math{0} if the synchronization was not
2594 successful.  Otherwise the value returned is the value to which the
2595 @code{fsync} or @code{fdatasync} function would have set the
2596 @code{errno} variable.  In this case nothing can be assumed about the
2597 consistency for the data written to this file descriptor.
2598
2599 The return value of this function is @math{0} if the request was
2600 successfully enqueued.  Otherwise the return value is @math{-1} and
2601 @code{errno} is set to one of the following values:
2602
2603 @table @code
2604 @item EAGAIN
2605 The request could not be enqueued due to temporary lack of resources.
2606 @item EBADF
2607 The file descriptor @code{@var{aiocbp}->aio_fildes} is not valid.
2608 @item EINVAL
2609 The implementation does not support I/O synchronization or the @var{op}
2610 parameter is other than @code{O_DSYNC} and @code{O_SYNC}.
2611 @item ENOSYS
2612 This function is not implemented.
2613 @end table
2614
2615 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2616 function is in fact @code{aio_fsync64} since the LFS interface
2617 transparently replaces the normal implementation.
2618 @end deftypefun
2619
2620 @comment aio.h
2621 @comment Unix98
2622 @deftypefun int aio_fsync64 (int @var{op}, struct aiocb64 *@var{aiocbp})
2623 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2624 This function is similar to @code{aio_fsync} with the only difference
2625 that the argument is a reference to a variable of type @code{struct
2626 aiocb64}.
2627
2628 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2629 function is available under the name @code{aio_fsync} and so
2630 transparently replaces the interface for small files on 32 bit
2631 machines.
2632 @end deftypefun
2633
2634 Another method of synchronization is to wait until one or more requests of a
2635 specific set terminated.  This could be achieved by the @code{aio_*}
2636 functions to notify the initiating process about the termination but in
2637 some situations this is not the ideal solution.  In a program which
2638 constantly updates clients somehow connected to the server it is not
2639 always the best solution to go round robin since some connections might
2640 be slow.  On the other hand letting the @code{aio_*} function notify the
2641 caller might also be not the best solution since whenever the process
2642 works on preparing data for on client it makes no sense to be
2643 interrupted by a notification since the new client will not be handled
2644 before the current client is served.  For situations like this
2645 @code{aio_suspend} should be used.
2646
2647 @comment aio.h
2648 @comment POSIX.1b
2649 @deftypefun int aio_suspend (const struct aiocb *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout})
2650 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
2651 @c Take aio_requests_mutex, set up waitlist and requestlist, wait
2652 @c for completion or timeout, and release the mutex.
2653 When calling this function, the calling thread is suspended until at
2654 least one of the requests pointed to by the @var{nent} elements of the
2655 array @var{list} has completed.  If any of the requests has already
2656 completed at the time @code{aio_suspend} is called, the function returns
2657 immediately.  Whether a request has terminated or not is determined by
2658 comparing the error status of the request with @code{EINPROGRESS}.  If
2659 an element of @var{list} is @code{NULL}, the entry is simply ignored.
2660
2661 If no request has finished, the calling process is suspended.  If
2662 @var{timeout} is @code{NULL}, the process is not woken until a request
2663 has finished.  If @var{timeout} is not @code{NULL}, the process remains
2664 suspended at least as long as specified in @var{timeout}.  In this case,
2665 @code{aio_suspend} returns with an error.
2666
2667 The return value of the function is @math{0} if one or more requests
2668 from the @var{list} have terminated.  Otherwise the function returns
2669 @math{-1} and @code{errno} is set to one of the following values:
2670
2671 @table @code
2672 @item EAGAIN
2673 None of the requests from the @var{list} completed in the time specified
2674 by @var{timeout}.
2675 @item EINTR
2676 A signal interrupted the @code{aio_suspend} function.  This signal might
2677 also be sent by the AIO implementation while signalling the termination
2678 of one of the requests.
2679 @item ENOSYS
2680 The @code{aio_suspend} function is not implemented.
2681 @end table
2682
2683 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2684 function is in fact @code{aio_suspend64} since the LFS interface
2685 transparently replaces the normal implementation.
2686 @end deftypefun
2687
2688 @comment aio.h
2689 @comment Unix98
2690 @deftypefun int aio_suspend64 (const struct aiocb64 *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout})
2691 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
2692 This function is similar to @code{aio_suspend} with the only difference
2693 that the argument is a reference to a variable of type @code{struct
2694 aiocb64}.
2695
2696 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} this
2697 function is available under the name @code{aio_suspend} and so
2698 transparently replaces the interface for small files on 32 bit
2699 machines.
2700 @end deftypefun
2701
2702 @node Cancel AIO Operations
2703 @subsection Cancellation of AIO Operations
2704
2705 When one or more requests are asynchronously processed, it might be
2706 useful in some situations to cancel a selected operation, e.g., if it
2707 becomes obvious that the written data is no longer accurate and would
2708 have to be overwritten soon.  As an example, assume an application, which
2709 writes data in files in a situation where new incoming data would have
2710 to be written in a file which will be updated by an enqueued request.
2711 The POSIX AIO implementation provides such a function, but this function
2712 is not capable of forcing the cancellation of the request.  It is up to the
2713 implementation to decide whether it is possible to cancel the operation
2714 or not.  Therefore using this function is merely a hint.
2715
2716 @comment aio.h
2717 @comment POSIX.1b
2718 @deftypefun int aio_cancel (int @var{fildes}, struct aiocb *@var{aiocbp})
2719 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2720 @c After fcntl to check the fd is open, hold aio_requests_mutex, call
2721 @c aio_find_req_fd, aio_remove_request, then aio_notify and
2722 @c aio_free_request each request before releasing the lock.
2723 @c aio_notify calls aio_notify_only and free, besides cond signal or
2724 @c similar.  aio_notify_only calls pthread_attr_init,
2725 @c pthread_attr_setdetachstate, malloc, pthread_create,
2726 @c notify_func_wrapper, aio_sigqueue, getpid, raise.
2727 @c notify_func_wraper calls aio_start_notify_thread, free and then the
2728 @c notifier function.
2729 The @code{aio_cancel} function can be used to cancel one or more
2730 outstanding requests.  If the @var{aiocbp} parameter is @code{NULL}, the
2731 function tries to cancel all of the outstanding requests which would process
2732 the file descriptor @var{fildes} (i.e., whose @code{aio_fildes} member
2733 is @var{fildes}).  If @var{aiocbp} is not @code{NULL}, @code{aio_cancel}
2734 attempts to cancel the specific request pointed to by @var{aiocbp}.
2735
2736 For requests which were successfully canceled, the normal notification
2737 about the termination of the request should take place.  I.e., depending
2738 on the @code{struct sigevent} object which controls this, nothing
2739 happens, a signal is sent or a thread is started.  If the request cannot
2740 be canceled, it terminates the usual way after performing the operation.
2741
2742 After a request is successfully canceled, a call to @code{aio_error} with
2743 a reference to this request as the parameter will return
2744 @code{ECANCELED} and a call to @code{aio_return} will return @math{-1}.
2745 If the request wasn't canceled and is still running the error status is
2746 still @code{EINPROGRESS}.
2747
2748 The return value of the function is @code{AIO_CANCELED} if there were
2749 requests which haven't terminated and which were successfully canceled.
2750 If there is one or more requests left which couldn't be canceled, the
2751 return value is @code{AIO_NOTCANCELED}.  In this case @code{aio_error}
2752 must be used to find out which of the, perhaps multiple, requests (in
2753 @var{aiocbp} is @code{NULL}) weren't successfully canceled.  If all
2754 requests already terminated at the time @code{aio_cancel} is called the
2755 return value is @code{AIO_ALLDONE}.
2756
2757 If an error occurred during the execution of @code{aio_cancel} the
2758 function returns @math{-1} and sets @code{errno} to one of the following
2759 values.
2760
2761 @table @code
2762 @item EBADF
2763 The file descriptor @var{fildes} is not valid.
2764 @item ENOSYS
2765 @code{aio_cancel} is not implemented.
2766 @end table
2767
2768 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64}, this
2769 function is in fact @code{aio_cancel64} since the LFS interface
2770 transparently replaces the normal implementation.
2771 @end deftypefun
2772
2773 @comment aio.h
2774 @comment Unix98
2775 @deftypefun int aio_cancel64 (int @var{fildes}, struct aiocb64 *@var{aiocbp})
2776 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}}
2777 This function is similar to @code{aio_cancel} with the only difference
2778 that the argument is a reference to a variable of type @code{struct
2779 aiocb64}.
2780
2781 When the sources are compiled with @code{_FILE_OFFSET_BITS == 64}, this
2782 function is available under the name @code{aio_cancel} and so
2783 transparently replaces the interface for small files on 32 bit
2784 machines.
2785 @end deftypefun
2786
2787 @node Configuration of AIO
2788 @subsection How to optimize the AIO implementation
2789
2790 The POSIX standard does not specify how the AIO functions are
2791 implemented.  They could be system calls, but it is also possible to
2792 emulate them at userlevel.
2793
2794 At the point of this writing, the available implementation is a userlevel
2795 implementation which uses threads for handling the enqueued requests.
2796 While this implementation requires making some decisions about
2797 limitations, hard limitations are something which is best avoided
2798 in @theglibc{}.  Therefore, @theglibc{} provides a means
2799 for tuning the AIO implementation according to the individual use.
2800
2801 @comment aio.h
2802 @comment GNU
2803 @deftp {Data Type} {struct aioinit}
2804 This data type is used to pass the configuration or tunable parameters
2805 to the implementation.  The program has to initialize the members of
2806 this struct and pass it to the implementation using the @code{aio_init}
2807 function.
2808
2809 @table @code
2810 @item int aio_threads
2811 This member specifies the maximal number of threads which may be used
2812 at any one time.
2813 @item int aio_num
2814 This number provides an estimate on the maximal number of simultaneously
2815 enqueued requests.
2816 @item int aio_locks
2817 Unused.
2818 @item int aio_usedba
2819 Unused.
2820 @item int aio_debug
2821 Unused.
2822 @item int aio_numusers
2823 Unused.
2824 @item int aio_reserved[2]
2825 Unused.
2826 @end table
2827 @end deftp
2828
2829 @comment aio.h
2830 @comment GNU
2831 @deftypefun void aio_init (const struct aioinit *@var{init})
2832 @safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}}
2833 @c All changes to global objects are guarded by aio_requests_mutex.
2834 This function must be called before any other AIO function.  Calling it
2835 is completely voluntary, as it is only meant to help the AIO
2836 implementation perform better.
2837
2838 Before calling the @code{aio_init}, function the members of a variable of
2839 type @code{struct aioinit} must be initialized.  Then a reference to
2840 this variable is passed as the parameter to @code{aio_init} which itself
2841 may or may not pay attention to the hints.
2842
2843 The function has no return value and no error cases are defined.  It is
2844 a extension which follows a proposal from the SGI implementation in
2845 @w{Irix 6}.  It is not covered by POSIX.1b or Unix98.
2846 @end deftypefun
2847
2848 @node Control Operations
2849 @section Control Operations on Files
2850
2851 @cindex control operations on files
2852 @cindex @code{fcntl} function
2853 This section describes how you can perform various other operations on
2854 file descriptors, such as inquiring about or setting flags describing
2855 the status of the file descriptor, manipulating record locks, and the
2856 like.  All of these operations are performed by the function @code{fcntl}.
2857
2858 The second argument to the @code{fcntl} function is a command that
2859 specifies which operation to perform.  The function and macros that name
2860 various flags that are used with it are declared in the header file
2861 @file{fcntl.h}.  Many of these flags are also used by the @code{open}
2862 function; see @ref{Opening and Closing Files}.
2863 @pindex fcntl.h
2864
2865 @comment fcntl.h
2866 @comment POSIX.1
2867 @deftypefun int fcntl (int @var{filedes}, int @var{command}, @dots{})
2868 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2869 The @code{fcntl} function performs the operation specified by
2870 @var{command} on the file descriptor @var{filedes}.  Some commands
2871 require additional arguments to be supplied.  These additional arguments
2872 and the return value and error conditions are given in the detailed
2873 descriptions of the individual commands.
2874
2875 Briefly, here is a list of what the various commands are.
2876
2877 @table @code
2878 @item F_DUPFD
2879 Duplicate the file descriptor (return another file descriptor pointing
2880 to the same open file).  @xref{Duplicating Descriptors}.
2881
2882 @item F_GETFD
2883 Get flags associated with the file descriptor.  @xref{Descriptor Flags}.
2884
2885 @item F_SETFD
2886 Set flags associated with the file descriptor.  @xref{Descriptor Flags}.
2887
2888 @item F_GETFL
2889 Get flags associated with the open file.  @xref{File Status Flags}.
2890
2891 @item F_SETFL
2892 Set flags associated with the open file.  @xref{File Status Flags}.
2893
2894 @item F_GETLK
2895 Get (test) a file lock.  @xref{File Locks}.
2896
2897 @item F_SETLK
2898 Set or clear a file lock.  @xref{File Locks}.
2899
2900 @item F_SETLKW
2901 Like @code{F_SETLK}, but wait for completion.  @xref{File Locks}.
2902
2903 @item F_GETLKP
2904 Get (test) a file-private lock.  @xref{File Locks}.
2905
2906 @item F_SETLKP
2907 Set or clear a file lock.  @xref{File Locks}.
2908
2909 @item F_SETLKPW
2910 Like @code{F_SETLKP}, but wait for completion.  @xref{File Locks}.
2911
2912 @item F_GETOWN
2913 Get process or process group ID to receive @code{SIGIO} signals.
2914 @xref{Interrupt Input}.
2915
2916 @item F_SETOWN
2917 Set process or process group ID to receive @code{SIGIO} signals.
2918 @xref{Interrupt Input}.
2919 @end table
2920
2921 This function is a cancellation point in multi-threaded programs.  This
2922 is a problem if the thread allocates some resources (like memory, file
2923 descriptors, semaphores or whatever) at the time @code{fcntl} is
2924 called.  If the thread gets canceled these resources stay allocated
2925 until the program ends.  To avoid this calls to @code{fcntl} should be
2926 protected using cancellation handlers.
2927 @c ref pthread_cleanup_push / pthread_cleanup_pop
2928 @end deftypefun
2929
2930
2931 @node Duplicating Descriptors
2932 @section Duplicating Descriptors
2933
2934 @cindex duplicating file descriptors
2935 @cindex redirecting input and output
2936
2937 You can @dfn{duplicate} a file descriptor, or allocate another file
2938 descriptor that refers to the same open file as the original.  Duplicate
2939 descriptors share one file position and one set of file status flags
2940 (@pxref{File Status Flags}), but each has its own set of file descriptor
2941 flags (@pxref{Descriptor Flags}).
2942
2943 The major use of duplicating a file descriptor is to implement
2944 @dfn{redirection} of input or output:  that is, to change the
2945 file or pipe that a particular file descriptor corresponds to.
2946
2947 You can perform this operation using the @code{fcntl} function with the
2948 @code{F_DUPFD} command, but there are also convenient functions
2949 @code{dup} and @code{dup2} for duplicating descriptors.
2950
2951 @pindex unistd.h
2952 @pindex fcntl.h
2953 The @code{fcntl} function and flags are declared in @file{fcntl.h},
2954 while prototypes for @code{dup} and @code{dup2} are in the header file
2955 @file{unistd.h}.
2956
2957 @comment unistd.h
2958 @comment POSIX.1
2959 @deftypefun int dup (int @var{old})
2960 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2961 This function copies descriptor @var{old} to the first available
2962 descriptor number (the first number not currently open).  It is
2963 equivalent to @code{fcntl (@var{old}, F_DUPFD, 0)}.
2964 @end deftypefun
2965
2966 @comment unistd.h
2967 @comment POSIX.1
2968 @deftypefun int dup2 (int @var{old}, int @var{new})
2969 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
2970 This function copies the descriptor @var{old} to descriptor number
2971 @var{new}.
2972
2973 If @var{old} is an invalid descriptor, then @code{dup2} does nothing; it
2974 does not close @var{new}.  Otherwise, the new duplicate of @var{old}
2975 replaces any previous meaning of descriptor @var{new}, as if @var{new}
2976 were closed first.
2977
2978 If @var{old} and @var{new} are different numbers, and @var{old} is a
2979 valid descriptor number, then @code{dup2} is equivalent to:
2980
2981 @smallexample
2982 close (@var{new});
2983 fcntl (@var{old}, F_DUPFD, @var{new})
2984 @end smallexample
2985
2986 However, @code{dup2} does this atomically; there is no instant in the
2987 middle of calling @code{dup2} at which @var{new} is closed and not yet a
2988 duplicate of @var{old}.
2989 @end deftypefun
2990
2991 @comment fcntl.h
2992 @comment POSIX.1
2993 @deftypevr Macro int F_DUPFD
2994 This macro is used as the @var{command} argument to @code{fcntl}, to
2995 copy the file descriptor given as the first argument.
2996
2997 The form of the call in this case is:
2998
2999 @smallexample
3000 fcntl (@var{old}, F_DUPFD, @var{next-filedes})
3001 @end smallexample
3002
3003 The @var{next-filedes} argument is of type @code{int} and specifies that
3004 the file descriptor returned should be the next available one greater
3005 than or equal to this value.
3006
3007 The return value from @code{fcntl} with this command is normally the value
3008 of the new file descriptor.  A return value of @math{-1} indicates an
3009 error.  The following @code{errno} error conditions are defined for
3010 this command:
3011
3012 @table @code
3013 @item EBADF
3014 The @var{old} argument is invalid.
3015
3016 @item EINVAL
3017 The @var{next-filedes} argument is invalid.
3018
3019 @item EMFILE
3020 There are no more file descriptors available---your program is already
3021 using the maximum.  In BSD and GNU, the maximum is controlled by a
3022 resource limit that can be changed; @pxref{Limits on Resources}, for
3023 more information about the @code{RLIMIT_NOFILE} limit.
3024 @end table
3025
3026 @code{ENFILE} is not a possible error code for @code{dup2} because
3027 @code{dup2} does not create a new opening of a file; duplicate
3028 descriptors do not count toward the limit which @code{ENFILE}
3029 indicates.  @code{EMFILE} is possible because it refers to the limit on
3030 distinct descriptor numbers in use in one process.
3031 @end deftypevr
3032
3033 Here is an example showing how to use @code{dup2} to do redirection.
3034 Typically, redirection of the standard streams (like @code{stdin}) is
3035 done by a shell or shell-like program before calling one of the
3036 @code{exec} functions (@pxref{Executing a File}) to execute a new
3037 program in a child process.  When the new program is executed, it
3038 creates and initializes the standard streams to point to the
3039 corresponding file descriptors, before its @code{main} function is
3040 invoked.
3041
3042 So, to redirect standard input to a file, the shell could do something
3043 like:
3044
3045 @smallexample
3046 pid = fork ();
3047 if (pid == 0)
3048   @{
3049     char *filename;
3050     char *program;
3051     int file;
3052     @dots{}
3053     file = TEMP_FAILURE_RETRY (open (filename, O_RDONLY));
3054     dup2 (file, STDIN_FILENO);
3055     TEMP_FAILURE_RETRY (close (file));
3056     execv (program, NULL);
3057   @}
3058 @end smallexample
3059
3060 There is also a more detailed example showing how to implement redirection
3061 in the context of a pipeline of processes in @ref{Launching Jobs}.
3062
3063
3064 @node Descriptor Flags
3065 @section File Descriptor Flags
3066 @cindex file descriptor flags
3067
3068 @dfn{File descriptor flags} are miscellaneous attributes of a file
3069 descriptor.  These flags are associated with particular file
3070 descriptors, so that if you have created duplicate file descriptors
3071 from a single opening of a file, each descriptor has its own set of flags.
3072
3073 Currently there is just one file descriptor flag: @code{FD_CLOEXEC},
3074 which causes the descriptor to be closed if you use any of the
3075 @code{exec@dots{}} functions (@pxref{Executing a File}).
3076
3077 The symbols in this section are defined in the header file
3078 @file{fcntl.h}.
3079 @pindex fcntl.h
3080
3081 @comment fcntl.h
3082 @comment POSIX.1
3083 @deftypevr Macro int F_GETFD
3084 This macro is used as the @var{command} argument to @code{fcntl}, to
3085 specify that it should return the file descriptor flags associated
3086 with the @var{filedes} argument.
3087
3088 The normal return value from @code{fcntl} with this command is a
3089 nonnegative number which can be interpreted as the bitwise OR of the
3090 individual flags (except that currently there is only one flag to use).
3091
3092 In case of an error, @code{fcntl} returns @math{-1}.  The following
3093 @code{errno} error conditions are defined for this command:
3094
3095 @table @code
3096 @item EBADF
3097 The @var{filedes} argument is invalid.
3098 @end table
3099 @end deftypevr
3100
3101
3102 @comment fcntl.h
3103 @comment POSIX.1
3104 @deftypevr Macro int F_SETFD
3105 This macro is used as the @var{command} argument to @code{fcntl}, to
3106 specify that it should set the file descriptor flags associated with the
3107 @var{filedes} argument.  This requires a third @code{int} argument to
3108 specify the new flags, so the form of the call is:
3109
3110 @smallexample
3111 fcntl (@var{filedes}, F_SETFD, @var{new-flags})
3112 @end smallexample
3113
3114 The normal return value from @code{fcntl} with this command is an
3115 unspecified value other than @math{-1}, which indicates an error.
3116 The flags and error conditions are the same as for the @code{F_GETFD}
3117 command.
3118 @end deftypevr
3119
3120 The following macro is defined for use as a file descriptor flag with
3121 the @code{fcntl} function.  The value is an integer constant usable
3122 as a bit mask value.
3123
3124 @comment fcntl.h
3125 @comment POSIX.1
3126 @deftypevr Macro int FD_CLOEXEC
3127 @cindex close-on-exec (file descriptor flag)
3128 This flag specifies that the file descriptor should be closed when
3129 an @code{exec} function is invoked; see @ref{Executing a File}.  When
3130 a file descriptor is allocated (as with @code{open} or @code{dup}),
3131 this bit is initially cleared on the new file descriptor, meaning that
3132 descriptor will survive into the new program after @code{exec}.
3133 @end deftypevr
3134
3135 If you want to modify the file descriptor flags, you should get the
3136 current flags with @code{F_GETFD} and modify the value.  Don't assume
3137 that the flags listed here are the only ones that are implemented; your
3138 program may be run years from now and more flags may exist then.  For
3139 example, here is a function to set or clear the flag @code{FD_CLOEXEC}
3140 without altering any other flags:
3141
3142 @smallexample
3143 /* @r{Set the @code{FD_CLOEXEC} flag of @var{desc} if @var{value} is nonzero,}
3144    @r{or clear the flag if @var{value} is 0.}
3145    @r{Return 0 on success, or -1 on error with @code{errno} set.} */
3146
3147 int
3148 set_cloexec_flag (int desc, int value)
3149 @{
3150   int oldflags = fcntl (desc, F_GETFD, 0);
3151   /* @r{If reading the flags failed, return error indication now.} */
3152   if (oldflags < 0)
3153     return oldflags;
3154   /* @r{Set just the flag we want to set.} */
3155   if (value != 0)
3156     oldflags |= FD_CLOEXEC;
3157   else
3158     oldflags &= ~FD_CLOEXEC;
3159   /* @r{Store modified flag word in the descriptor.} */
3160   return fcntl (desc, F_SETFD, oldflags);
3161 @}
3162 @end smallexample
3163
3164 @node File Status Flags
3165 @section File Status Flags
3166 @cindex file status flags
3167
3168 @dfn{File status flags} are used to specify attributes of the opening of a
3169 file.  Unlike the file descriptor flags discussed in @ref{Descriptor
3170 Flags}, the file status flags are shared by duplicated file descriptors
3171 resulting from a single opening of the file.  The file status flags are
3172 specified with the @var{flags} argument to @code{open};
3173 @pxref{Opening and Closing Files}.
3174
3175 File status flags fall into three categories, which are described in the
3176 following sections.
3177
3178 @itemize @bullet
3179 @item
3180 @ref{Access Modes}, specify what type of access is allowed to the
3181 file: reading, writing, or both.  They are set by @code{open} and are
3182 returned by @code{fcntl}, but cannot be changed.
3183
3184 @item
3185 @ref{Open-time Flags}, control details of what @code{open} will do.
3186 These flags are not preserved after the @code{open} call.
3187
3188 @item
3189 @ref{Operating Modes}, affect how operations such as @code{read} and
3190 @code{write} are done.  They are set by @code{open}, and can be fetched or
3191 changed with @code{fcntl}.
3192 @end itemize
3193
3194 The symbols in this section are defined in the header file
3195 @file{fcntl.h}.
3196 @pindex fcntl.h
3197
3198 @menu
3199 * Access Modes::                Whether the descriptor can read or write.
3200 * Open-time Flags::             Details of @code{open}.
3201 * Operating Modes::             Special modes to control I/O operations.
3202 * Getting File Status Flags::   Fetching and changing these flags.
3203 @end menu
3204
3205 @node Access Modes
3206 @subsection File Access Modes
3207
3208 The file access modes allow a file descriptor to be used for reading,
3209 writing, or both.  (On @gnuhurdsystems{}, they can also allow none of these,
3210 and allow execution of the file as a program.)  The access modes are chosen
3211 when the file is opened, and never change.
3212
3213 @comment fcntl.h
3214 @comment POSIX.1
3215 @deftypevr Macro int O_RDONLY
3216 Open the file for read access.
3217 @end deftypevr
3218
3219 @comment fcntl.h
3220 @comment POSIX.1
3221 @deftypevr Macro int O_WRONLY
3222 Open the file for write access.
3223 @end deftypevr
3224
3225 @comment fcntl.h
3226 @comment POSIX.1
3227 @deftypevr Macro int O_RDWR
3228 Open the file for both reading and writing.
3229 @end deftypevr
3230
3231 On @gnuhurdsystems{} (and not on other systems), @code{O_RDONLY} and
3232 @code{O_WRONLY} are independent bits that can be bitwise-ORed together,
3233 and it is valid for either bit to be set or clear.  This means that
3234 @code{O_RDWR} is the same as @code{O_RDONLY|O_WRONLY}.  A file access
3235 mode of zero is permissible; it allows no operations that do input or
3236 output to the file, but does allow other operations such as
3237 @code{fchmod}.  On @gnuhurdsystems{}, since ``read-only'' or ``write-only''
3238 is a misnomer, @file{fcntl.h} defines additional names for the file
3239 access modes.  These names are preferred when writing GNU-specific code.
3240 But most programs will want to be portable to other POSIX.1 systems and
3241 should use the POSIX.1 names above instead.
3242
3243 @comment fcntl.h (optional)
3244 @comment GNU
3245 @deftypevr Macro int O_READ
3246 Open the file for reading.  Same as @code{O_RDONLY}; only defined on GNU.
3247 @end deftypevr
3248
3249 @comment fcntl.h (optional)
3250 @comment GNU
3251 @deftypevr Macro int O_WRITE
3252 Open the file for writing.  Same as @code{O_WRONLY}; only defined on GNU.
3253 @end deftypevr
3254
3255 @comment fcntl.h (optional)
3256 @comment GNU
3257 @deftypevr Macro int O_EXEC
3258 Open the file for executing.  Only defined on GNU.
3259 @end deftypevr
3260
3261 To determine the file access mode with @code{fcntl}, you must extract
3262 the access mode bits from the retrieved file status flags.  On
3263 @gnuhurdsystems{},
3264 you can just test the @code{O_READ} and @code{O_WRITE} bits in
3265 the flags word.  But in other POSIX.1 systems, reading and writing
3266 access modes are not stored as distinct bit flags.  The portable way to
3267 extract the file access mode bits is with @code{O_ACCMODE}.
3268
3269 @comment fcntl.h
3270 @comment POSIX.1
3271 @deftypevr Macro int O_ACCMODE
3272 This macro stands for a mask that can be bitwise-ANDed with the file
3273 status flag value to produce a value representing the file access mode.
3274 The mode will be @code{O_RDONLY}, @code{O_WRONLY}, or @code{O_RDWR}.
3275 (On @gnuhurdsystems{} it could also be zero, and it never includes the
3276 @code{O_EXEC} bit.)
3277 @end deftypevr
3278
3279 @node Open-time Flags
3280 @subsection Open-time Flags
3281
3282 The open-time flags specify options affecting how @code{open} will behave.
3283 These options are not preserved once the file is open.  The exception to
3284 this is @code{O_NONBLOCK}, which is also an I/O operating mode and so it
3285 @emph{is} saved.  @xref{Opening and Closing Files}, for how to call
3286 @code{open}.
3287
3288 There are two sorts of options specified by open-time flags.
3289
3290 @itemize @bullet
3291 @item
3292 @dfn{File name translation flags} affect how @code{open} looks up the
3293 file name to locate the file, and whether the file can be created.
3294 @cindex file name translation flags
3295 @cindex flags, file name translation
3296
3297 @item
3298 @dfn{Open-time action flags} specify extra operations that @code{open} will
3299 perform on the file once it is open.
3300 @cindex open-time action flags
3301 @cindex flags, open-time action
3302 @end itemize
3303
3304 Here are the file name translation flags.
3305
3306 @comment fcntl.h
3307 @comment POSIX.1
3308 @deftypevr Macro int O_CREAT
3309 If set, the file will be created if it doesn't already exist.
3310 @c !!! mode arg, umask
3311 @cindex create on open (file status flag)
3312 @end deftypevr
3313
3314 @comment fcntl.h
3315 @comment POSIX.1
3316 @deftypevr Macro int O_EXCL
3317 If both @code{O_CREAT} and @code{O_EXCL} are set, then @code{open} fails
3318 if the specified file already exists.  This is guaranteed to never
3319 clobber an existing file.
3320 @end deftypevr
3321
3322 @comment fcntl.h
3323 @comment POSIX.1
3324 @deftypevr Macro int O_NONBLOCK
3325 @cindex non-blocking open
3326 This prevents @code{open} from blocking for a ``long time'' to open the
3327 file.  This is only meaningful for some kinds of files, usually devices
3328 such as serial ports; when it is not meaningful, it is harmless and
3329 ignored.  Often opening a port to a modem blocks until the modem reports
3330 carrier detection; if @code{O_NONBLOCK} is specified, @code{open} will
3331 return immediately without a carrier.
3332
3333 Note that the @code{O_NONBLOCK} flag is overloaded as both an I/O operating
3334 mode and a file name translation flag.  This means that specifying
3335 @code{O_NONBLOCK} in @code{open} also sets nonblocking I/O mode;
3336 @pxref{Operating Modes}.  To open the file without blocking but do normal
3337 I/O that blocks, you must call @code{open} with @code{O_NONBLOCK} set and
3338 then call @code{fcntl} to turn the bit off.
3339 @end deftypevr
3340
3341 @comment fcntl.h
3342 @comment POSIX.1
3343 @deftypevr Macro int O_NOCTTY
3344 If the named file is a terminal device, don't make it the controlling
3345 terminal for the process.  @xref{Job Control}, for information about
3346 what it means to be the controlling terminal.
3347
3348 On @gnuhurdsystems{} and 4.4 BSD, opening a file never makes it the
3349 controlling terminal and @code{O_NOCTTY} is zero.  However, @gnulinuxsystems{}
3350 and some other systems use a nonzero value for @code{O_NOCTTY} and set the
3351 controlling terminal when you open a file that is a terminal device; so
3352 to be portable, use @code{O_NOCTTY} when it is important to avoid this.
3353 @cindex controlling terminal, setting
3354 @end deftypevr
3355
3356 The following three file name translation flags exist only on
3357 @gnuhurdsystems{}.
3358
3359 @comment fcntl.h (optional)
3360 @comment GNU
3361 @deftypevr Macro int O_IGNORE_CTTY
3362 Do not recognize the named file as the controlling terminal, even if it
3363 refers to the process's existing controlling terminal device.  Operations
3364 on the new file descriptor will never induce job control signals.
3365 @xref{Job Control}.
3366 @end deftypevr
3367
3368 @comment fcntl.h (optional)
3369 @comment GNU
3370 @deftypevr Macro int O_NOLINK
3371 If the named file is a symbolic link, open the link itself instead of
3372 the file it refers to.  (@code{fstat} on the new file descriptor will
3373 return the information returned by @code{lstat} on the link's name.)
3374 @cindex symbolic link, opening
3375 @end deftypevr
3376
3377 @comment fcntl.h (optional)
3378 @comment GNU
3379 @deftypevr Macro int O_NOTRANS
3380 If the named file is specially translated, do not invoke the translator.
3381 Open the bare file the translator itself sees.
3382 @end deftypevr
3383
3384
3385 The open-time action flags tell @code{open} to do additional operations
3386 which are not really related to opening the file.  The reason to do them
3387 as part of @code{open} instead of in separate calls is that @code{open}
3388 can do them @i{atomically}.
3389
3390 @comment fcntl.h
3391 @comment POSIX.1
3392 @deftypevr Macro int O_TRUNC
3393 Truncate the file to zero length.  This option is only useful for
3394 regular files, not special files such as directories or FIFOs.  POSIX.1
3395 requires that you open the file for writing to use @code{O_TRUNC}.  In
3396 BSD and GNU you must have permission to write the file to truncate it,
3397 but you need not open for write access.
3398
3399 This is the only open-time action flag specified by POSIX.1.  There is
3400 no good reason for truncation to be done by @code{open}, instead of by
3401 calling @code{ftruncate} afterwards.  The @code{O_TRUNC} flag existed in
3402 Unix before @code{ftruncate} was invented, and is retained for backward
3403 compatibility.
3404 @end deftypevr
3405
3406 The remaining operating modes are BSD extensions.  They exist only
3407 on some systems.  On other systems, these macros are not defined.
3408
3409 @comment fcntl.h (optional)
3410 @comment BSD
3411 @deftypevr Macro int O_SHLOCK
3412 Acquire a shared lock on the file, as with @code{flock}.
3413 @xref{File Locks}.
3414
3415 If @code{O_CREAT} is specified, the locking is done atomically when
3416 creating the file.  You are guaranteed that no other process will get
3417 the lock on the new file first.
3418 @end deftypevr
3419
3420 @comment fcntl.h (optional)
3421 @comment BSD
3422 @deftypevr Macro int O_EXLOCK
3423 Acquire an exclusive lock on the file, as with @code{flock}.
3424 @xref{File Locks}.  This is atomic like @code{O_SHLOCK}.
3425 @end deftypevr
3426
3427 @node Operating Modes
3428 @subsection I/O Operating Modes
3429
3430 The operating modes affect how input and output operations using a file
3431 descriptor work.  These flags are set by @code{open} and can be fetched
3432 and changed with @code{fcntl}.
3433
3434 @comment fcntl.h
3435 @comment POSIX.1
3436 @deftypevr Macro int O_APPEND
3437 The bit that enables append mode for the file.  If set, then all
3438 @code{write} operations write the data at the end of the file, extending
3439 it, regardless of the current file position.  This is the only reliable
3440 way to append to a file.  In append mode, you are guaranteed that the
3441 data you write will always go to the current end of the file, regardless
3442 of other processes writing to the file.  Conversely, if you simply set
3443 the file position to the end of file and write, then another process can
3444 extend the file after you set the file position but before you write,
3445 resulting in your data appearing someplace before the real end of file.
3446 @end deftypevr
3447
3448 @comment fcntl.h
3449 @comment POSIX.1
3450 @deftypevr Macro int O_NONBLOCK
3451 The bit that enables nonblocking mode for the file.  If this bit is set,
3452 @code{read} requests on the file can return immediately with a failure
3453 status if there is no input immediately available, instead of blocking.
3454 Likewise, @code{write} requests can also return immediately with a
3455 failure status if the output can't be written immediately.
3456
3457 Note that the @code{O_NONBLOCK} flag is overloaded as both an I/O
3458 operating mode and a file name translation flag; @pxref{Open-time Flags}.
3459 @end deftypevr
3460
3461 @comment fcntl.h
3462 @comment BSD
3463 @deftypevr Macro int O_NDELAY
3464 This is an obsolete name for @code{O_NONBLOCK}, provided for
3465 compatibility with BSD.  It is not defined by the POSIX.1 standard.
3466 @end deftypevr
3467
3468 The remaining operating modes are BSD and GNU extensions.  They exist only
3469 on some systems.  On other systems, these macros are not defined.
3470
3471 @comment fcntl.h
3472 @comment BSD
3473 @deftypevr Macro int O_ASYNC
3474 The bit that enables asynchronous input mode.  If set, then @code{SIGIO}
3475 signals will be generated when input is available.  @xref{Interrupt Input}.
3476
3477 Asynchronous input mode is a BSD feature.
3478 @end deftypevr
3479
3480 @comment fcntl.h
3481 @comment BSD
3482 @deftypevr Macro int O_FSYNC
3483 The bit that enables synchronous writing for the file.  If set, each
3484 @code{write} call will make sure the data is reliably stored on disk before
3485 returning. @c !!! xref fsync
3486
3487 Synchronous writing is a BSD feature.
3488 @end deftypevr
3489
3490 @comment fcntl.h
3491 @comment BSD
3492 @deftypevr Macro int O_SYNC
3493 This is another name for @code{O_FSYNC}.  They have the same value.
3494 @end deftypevr
3495
3496 @comment fcntl.h
3497 @comment GNU
3498 @deftypevr Macro int O_NOATIME
3499 If this bit is set, @code{read} will not update the access time of the
3500 file.  @xref{File Times}.  This is used by programs that do backups, so
3501 that backing a file up does not count as reading it.
3502 Only the owner of the file or the superuser may use this bit.
3503
3504 This is a GNU extension.
3505 @end deftypevr
3506
3507 @node Getting File Status Flags
3508 @subsection Getting and Setting File Status Flags
3509
3510 The @code{fcntl} function can fetch or change file status flags.
3511
3512 @comment fcntl.h
3513 @comment POSIX.1
3514 @deftypevr Macro int F_GETFL
3515 This macro is used as the @var{command} argument to @code{fcntl}, to
3516 read the file status flags for the open file with descriptor
3517 @var{filedes}.
3518
3519 The normal return value from @code{fcntl} with this command is a
3520 nonnegative number which can be interpreted as the bitwise OR of the
3521 individual flags.  Since the file access modes are not single-bit values,
3522 you can mask off other bits in the returned flags with @code{O_ACCMODE}
3523 to compare them.
3524
3525 In case of an error, @code{fcntl} returns @math{-1}.  The following
3526 @code{errno} error conditions are defined for this command:
3527
3528 @table @code
3529 @item EBADF
3530 The @var{filedes} argument is invalid.
3531 @end table
3532 @end deftypevr
3533
3534 @comment fcntl.h
3535 @comment POSIX.1
3536 @deftypevr Macro int F_SETFL
3537 This macro is used as the @var{command} argument to @code{fcntl}, to set
3538 the file status flags for the open file corresponding to the
3539 @var{filedes} argument.  This command requires a third @code{int}
3540 argument to specify the new flags, so the call looks like this:
3541
3542 @smallexample
3543 fcntl (@var{filedes}, F_SETFL, @var{new-flags})
3544 @end smallexample
3545
3546 You can't change the access mode for the file in this way; that is,
3547 whether the file descriptor was opened for reading or writing.
3548
3549 The normal return value from @code{fcntl} with this command is an
3550 unspecified value other than @math{-1}, which indicates an error.  The
3551 error conditions are the same as for the @code{F_GETFL} command.
3552 @end deftypevr
3553
3554 If you want to modify the file status flags, you should get the current
3555 flags with @code{F_GETFL} and modify the value.  Don't assume that the
3556 flags listed here are the only ones that are implemented; your program
3557 may be run years from now and more flags may exist then.  For example,
3558 here is a function to set or clear the flag @code{O_NONBLOCK} without
3559 altering any other flags:
3560
3561 @smallexample
3562 @group
3563 /* @r{Set the @code{O_NONBLOCK} flag of @var{desc} if @var{value} is nonzero,}
3564    @r{or clear the flag if @var{value} is 0.}
3565    @r{Return 0 on success, or -1 on error with @code{errno} set.} */
3566
3567 int
3568 set_nonblock_flag (int desc, int value)
3569 @{
3570   int oldflags = fcntl (desc, F_GETFL, 0);
3571   /* @r{If reading the flags failed, return error indication now.} */
3572   if (oldflags == -1)
3573     return -1;
3574   /* @r{Set just the flag we want to set.} */
3575   if (value != 0)
3576     oldflags |= O_NONBLOCK;
3577   else
3578     oldflags &= ~O_NONBLOCK;
3579   /* @r{Store modified flag word in the descriptor.} */
3580   return fcntl (desc, F_SETFL, oldflags);
3581 @}
3582 @end group
3583 @end smallexample
3584
3585 @node File Locks
3586 @section File Locks
3587
3588 @cindex file locks
3589 @cindex record locking
3590 This section describes "classic" record locks.  There is also a newer type
3591 of record lock that is associated with the open file table entry instead
3592 of the process.  @xref{File-private Locks}
3593
3594 The remaining @code{fcntl} commands are used to support @dfn{record
3595 locking}, which permits multiple cooperating programs to prevent each
3596 other from simultaneously accessing parts of a file in error-prone
3597 ways.
3598
3599 @cindex exclusive lock
3600 @cindex write lock
3601 An @dfn{exclusive} or @dfn{write} lock gives a process exclusive access
3602 for writing to the specified part of the file.  While a write lock is in
3603 place, no other process can lock that part of the file.
3604
3605 @cindex shared lock
3606 @cindex read lock
3607 A @dfn{shared} or @dfn{read} lock prohibits any other process from
3608 requesting a write lock on the specified part of the file.  However,
3609 other processes can request read locks.
3610
3611 The @code{read} and @code{write} functions do not actually check to see
3612 whether there are any locks in place.  If you want to implement a
3613 locking protocol for a file shared by multiple processes, your application
3614 must do explicit @code{fcntl} calls to request and clear locks at the
3615 appropriate points.
3616
3617 Locks are associated with processes.  A process can only have one kind
3618 of lock set for each byte of a given file.  When any file descriptor for
3619 that file is closed by the process, all of the locks that process holds
3620 on that file are released, even if the locks were made using other
3621 descriptors that remain open.  Likewise, locks are released when a
3622 process exits, and are not inherited by child processes created using
3623 @code{fork} (@pxref{Creating a Process}).
3624
3625 When making a lock, use a @code{struct flock} to specify what kind of
3626 lock and where.  This data type and the associated macros for the
3627 @code{fcntl} function are declared in the header file @file{fcntl.h}.
3628 @pindex fcntl.h
3629
3630 @comment fcntl.h
3631 @comment POSIX.1
3632 @deftp {Data Type} {struct flock}
3633 This structure is used with the @code{fcntl} function to describe a file
3634 lock.  It has these members:
3635
3636 @table @code
3637 @item short int l_type
3638 Specifies the type of the lock; one of @code{F_RDLCK}, @code{F_WRLCK}, or
3639 @code{F_UNLCK}.
3640
3641 @item short int l_whence
3642 This corresponds to the @var{whence} argument to @code{fseek} or
3643 @code{lseek}, and specifies what the offset is relative to.  Its value
3644 can be one of @code{SEEK_SET}, @code{SEEK_CUR}, or @code{SEEK_END}.
3645
3646 @item off_t l_start
3647 This specifies the offset of the start of the region to which the lock
3648 applies, and is given in bytes relative to the point specified by
3649 @code{l_whence} member.
3650
3651 @item off_t l_len
3652 This specifies the length of the region to be locked.  A value of
3653 @code{0} is treated specially; it means the region extends to the end of
3654 the file.
3655
3656 @item pid_t l_pid
3657 This field is the process ID (@pxref{Process Creation Concepts}) of the
3658 process holding the lock.  It is filled in by calling @code{fcntl} with
3659 the @code{F_GETLK} command, but is ignored when making a lock.  If the
3660 conflicting lock is a File-private lock (@pxref{File-private Locks}),
3661 then this field will be set to @math{-1}.
3662 @end table
3663 @end deftp
3664
3665 @comment fcntl.h
3666 @comment POSIX.1
3667 @deftypevr Macro int F_GETLK
3668 This macro is used as the @var{command} argument to @code{fcntl}, to
3669 specify that it should get information about a lock.  This command
3670 requires a third argument of type @w{@code{struct flock *}} to be passed
3671 to @code{fcntl}, so that the form of the call is:
3672
3673 @smallexample
3674 fcntl (@var{filedes}, F_GETLK, @var{lockp})
3675 @end smallexample
3676
3677 If there is a lock already in place that would block the lock described
3678 by the @var{lockp} argument, information about that lock overwrites
3679 @code{*@var{lockp}}.  Existing locks are not reported if they are
3680 compatible with making a new lock as specified.  Thus, you should
3681 specify a lock type of @code{F_WRLCK} if you want to find out about both
3682 read and write locks, or @code{F_RDLCK} if you want to find out about
3683 write locks only.
3684
3685 There might be more than one lock affecting the region specified by the
3686 @var{lockp} argument, but @code{fcntl} only returns information about
3687 one of them.  The @code{l_whence} member of the @var{lockp} structure is
3688 set to @code{SEEK_SET} and the @code{l_start} and @code{l_len} fields
3689 set to identify the locked region.
3690
3691 If no lock applies, the only change to the @var{lockp} structure is to
3692 update the @code{l_type} to a value of @code{F_UNLCK}.
3693
3694 The normal return value from @code{fcntl} with this command is an
3695 unspecified value other than @math{-1}, which is reserved to indicate an
3696 error.  The following @code{errno} error conditions are defined for
3697 this command:
3698
3699 @table @code
3700 @item EBADF
3701 The @var{filedes} argument is invalid.
3702
3703 @item EINVAL
3704 Either the @var{lockp} argument doesn't specify valid lock information,
3705 or the file associated with @var{filedes} doesn't support locks.
3706 @end table
3707 @end deftypevr
3708
3709 @comment fcntl.h
3710 @comment POSIX.1
3711 @deftypevr Macro int F_SETLK
3712 This macro is used as the @var{command} argument to @code{fcntl}, to
3713 specify that it should set or clear a lock.  This command requires a
3714 third argument of type @w{@code{struct flock *}} to be passed to
3715 @code{fcntl}, so that the form of the call is:
3716
3717 @smallexample
3718 fcntl (@var{filedes}, F_SETLK, @var{lockp})
3719 @end smallexample
3720
3721 If the process already has a lock on any part of the region, the old lock
3722 on that part is replaced with the new lock.  You can remove a lock
3723 by specifying a lock type of @code{F_UNLCK}.
3724
3725 If the lock cannot be set, @code{fcntl} returns immediately with a value
3726 of @math{-1}.  This function does not block waiting for other processes
3727 to release locks.  If @code{fcntl} succeeds, it return a value other
3728 than @math{-1}.
3729
3730 The following @code{errno} error conditions are defined for this
3731 function:
3732
3733 @table @code
3734 @item EAGAIN
3735 @itemx EACCES
3736 The lock cannot be set because it is blocked by an existing lock on the
3737 file.  Some systems use @code{EAGAIN} in this case, and other systems
3738 use @code{EACCES}; your program should treat them alike, after
3739 @code{F_SETLK}.  (@gnulinuxhurdsystems{} always use @code{EAGAIN}.)
3740
3741 @item EBADF
3742 Either: the @var{filedes} argument is invalid; you requested a read lock
3743 but the @var{filedes} is not open for read access; or, you requested a
3744 write lock but the @var{filedes} is not open for write access.
3745
3746 @item EINVAL
3747 Either the @var{lockp} argument doesn't specify valid lock information,
3748 or the file associated with @var{filedes} doesn't support locks.
3749
3750 @item ENOLCK
3751 The system has run out of file lock resources; there are already too
3752 many file locks in place.
3753
3754 Well-designed file systems never report this error, because they have no
3755 limitation on the number of locks.  However, you must still take account
3756 of the possibility of this error, as it could result from network access
3757 to a file system on another machine.
3758 @end table
3759 @end deftypevr
3760
3761 @comment fcntl.h
3762 @comment POSIX.1
3763 @deftypevr Macro int F_SETLKW
3764 This macro is used as the @var{command} argument to @code{fcntl}, to
3765 specify that it should set or clear a lock.  It is just like the
3766 @code{F_SETLK} command, but causes the process to block (or wait)
3767 until the request can be specified.
3768
3769 This command requires a third argument of type @code{struct flock *}, as
3770 for the @code{F_SETLK} command.
3771
3772 The @code{fcntl} return values and errors are the same as for the
3773 @code{F_SETLK} command, but these additional @code{errno} error conditions
3774 are defined for this command:
3775
3776 @table @code
3777 @item EINTR
3778 The function was interrupted by a signal while it was waiting.
3779 @xref{Interrupted Primitives}.
3780
3781 @item EDEADLK
3782 The specified region is being locked by another process.  But that
3783 process is waiting to lock a region which the current process has
3784 locked, so waiting for the lock would result in deadlock.  The system
3785 does not guarantee that it will detect all such conditions, but it lets
3786 you know if it notices one.
3787 @end table
3788 @end deftypevr
3789
3790
3791 The following macros are defined for use as values for the @code{l_type}
3792 member of the @code{flock} structure.  The values are integer constants.
3793
3794 @table @code
3795 @comment fcntl.h
3796 @comment POSIX.1
3797 @vindex F_RDLCK
3798 @item F_RDLCK
3799 This macro is used to specify a read (or shared) lock.
3800
3801 @comment fcntl.h
3802 @comment POSIX.1
3803 @vindex F_WRLCK
3804 @item F_WRLCK
3805 This macro is used to specify a write (or exclusive) lock.
3806
3807 @comment fcntl.h
3808 @comment POSIX.1
3809 @vindex F_UNLCK
3810 @item F_UNLCK
3811 This macro is used to specify that the region is unlocked.
3812 @end table
3813
3814 As an example of a situation where file locking is useful, consider a
3815 program that can be run simultaneously by several different users, that
3816 logs status information to a common file.  One example of such a program
3817 might be a game that uses a file to keep track of high scores.  Another
3818 example might be a program that records usage or accounting information
3819 for billing purposes.
3820
3821 Having multiple copies of the program simultaneously writing to the
3822 file could cause the contents of the file to become mixed up.  But
3823 you can prevent this kind of problem by setting a write lock on the
3824 file before actually writing to the file.
3825
3826 If the program also needs to read the file and wants to make sure that
3827 the contents of the file are in a consistent state, then it can also use
3828 a read lock.  While the read lock is set, no other process can lock
3829 that part of the file for writing.
3830
3831 @c ??? This section could use an example program.
3832
3833 Remember that file locks are only a @emph{voluntary} protocol for
3834 controlling access to a file.  There is still potential for access to
3835 the file by programs that don't use the lock protocol.
3836
3837 @node File-private Locks
3838 @section File-private Locks
3839
3840 In contrast to classic record locks (@pxref{File Locks}), file-private
3841 locks are associated with an open file table entry rather than a
3842 process.  File-private locks set on an open file descriptor will never
3843 conflict with existing file-private locks set on that file descriptor.
3844
3845 File-private locks are also inherited by child processes across
3846 @code{fork} (@pxref{Creating a Process}), along with the file
3847 descriptor.  For this reason, the @code{l_pid} field in @code{struct
3848 flock} is meaningless for file private locks.  For the @code{F_GETLK} and
3849 @code{F_GETLKP} commands, the @code{l_pid} value is always set to
3850 @math{-1} if the blocking lock is a file-private one.
3851
3852 Note that using @code{dup} (@pxref{Duplicating Descriptors}) to clone a
3853 file descriptor does not give you a new instance of the open file, but
3854 instead just clones a reference to an existing open file.  Thus,
3855 file-private locks set on a file descriptor cloned by @code{dup} will
3856 never conflict with file-private locks set on the original descriptor.
3857
3858 File-private locks always conflict with classic record locks, even if
3859 acquired by the same process or on the same open file descriptor.
3860
3861 File-private locks use the same @code{struct flock} as classic POSIX
3862 locks as an argument (@pxref{File Locks}) and the macros for the
3863 cmd values are also declared in the header file @file{fcntl.h}.
3864 @pindex fcntl.h.
3865
3866 @deftypevr Macro int F_GETLKP
3867 This macro is used as the @var{command} argument to @code{fcntl}, to
3868 specify that it should get information about a lock.  This command
3869 requires a third argument of type @w{@code{struct flock *}} to be passed
3870 to @code{fcntl}, so that the form of the call is:
3871
3872 If there is a lock already in place that would block the lock described
3873 by the @var{lockp} argument, information about that lock overwrites
3874 @code{*@var{lockp}}.  Existing locks are not reported if they are
3875 compatible with making a new lock as specified.  Thus, you should
3876 specify a lock type of @code{F_WRLCK} if you want to find out about both
3877 read and write locks, or @code{F_RDLCK} if you want to find out about
3878 write locks only.
3879
3880 There might be more than one lock affecting the region specified by the
3881 @var{lockp} argument, but @code{fcntl} only returns information about
3882 one of them.  The @code{l_whence} member of the @var{lockp} structure is
3883 set to @code{SEEK_SET} and the @code{l_start} and @code{l_len} fields
3884 set to identify the locked region.
3885
3886 If no lock applies, the only change to the @var{lockp} structure is to
3887 update the @code{l_type} to a value of @code{F_UNLCK}.
3888
3889 The normal return value from @code{fcntl} with this command is an
3890 unspecified value other than @math{-1}, which is reserved to indicate an
3891 error.  The following @code{errno} error conditions are defined for
3892 this command:
3893
3894 @table @code
3895 @item EBADF
3896 The @var{filedes} argument is invalid.
3897
3898 @item EINVAL
3899 Either the @var{lockp} argument doesn't specify valid lock information,
3900 or the file associated with @var{filedes} doesn't support locks.
3901 @end table
3902 @end deftypevr
3903
3904 @comment fcntl.h
3905 @comment POSIX.1
3906 @deftypevr Macro int F_SETLKP
3907 This macro is used as the @var{command} argument to @code{fcntl}, to
3908 specify that it should set or clear a lock.  This command requires a
3909 third argument of type @w{@code{struct flock *}} to be passed to
3910 @code{fcntl}, so that the form of the call is:
3911
3912 @smallexample
3913 fcntl (@var{filedes}, F_SETLK, @var{lockp})
3914 @end smallexample
3915
3916 If the opened file already has a lock on any part of the
3917 region, the old lock on that part is replaced with the new lock.  You
3918 can remove a lock by specifying a lock type of @code{F_UNLCK}.
3919
3920 If the lock cannot be set, @code{fcntl} returns immediately with a value
3921 of @math{-1}.  This function does not block waiting for other tasks
3922 to release locks.  If @code{fcntl} succeeds, it returns a value other
3923 than @math{-1}.
3924
3925 The following @code{errno} error conditions are defined for this
3926 function:
3927
3928 @table @code
3929 @item EAGAIN
3930 @itemx EACCES
3931 The lock cannot be set because it is blocked by an existing lock on the
3932 file.  Some systems use @code{EAGAIN} in this case, and other systems
3933 use @code{EACCES}; your program should treat them alike, after
3934 @code{F_SETLKP}.  (@gnulinuxhurdsystems{} always use @code{EAGAIN}.)
3935
3936 @item EBADF
3937 Either: the @var{filedes} argument is invalid; you requested a read lock
3938 but the @var{filedes} is not open for read access; or, you requested a
3939 write lock but the @var{filedes} is not open for write access.
3940
3941 @item EINVAL
3942 Either the @var{lockp} argument doesn't specify valid lock information,
3943 or the file associated with @var{filedes} doesn't support locks.
3944
3945 @item ENOLCK
3946 The system has run out of file lock resources; there are already too
3947 many file locks in place.
3948
3949 Well-designed file systems never report this error, because they have no
3950 limitation on the number of locks.  However, you must still take account
3951 of the possibility of this error, as it could result from network access
3952 to a file system on another machine.
3953 @end table
3954 @end deftypevr
3955
3956 @comment fcntl.h
3957 @comment POSIX.1
3958 @deftypevr Macro int F_SETLKPW
3959 This macro is used as the @var{command} argument to @code{fcntl}, to
3960 specify that it should set or clear a lock.  It is just like the
3961 @code{F_SETLKP} command, but causes the process to block (or wait)
3962 until the request can be specified.
3963
3964 This command requires a third argument of type @code{struct flock *}, as
3965 for the @code{F_SETLKP} command.
3966
3967 The @code{fcntl} return values and errors are the same as for the
3968 @code{F_SETLKP} command, but these additional @code{errno} error conditions
3969 are defined for this command:
3970
3971 @table @code
3972 @item EINTR
3973 The function was interrupted by a signal while it was waiting.
3974 @xref{Interrupted Primitives}.
3975
3976 @end table
3977 @end deftypevr
3978
3979 File-private locks are useful in the same sorts of situations as classic
3980 record locks.  They can also be used to synchronize file access between
3981 threads within the same process by giving each thread its own open file
3982 instance.
3983
3984 Because they are only released automatically when the last reference to
3985 an open file is destroyed, file-private locks allow more assurance that
3986 the locks will not be released due to a library routine opening and
3987 closing a file without the application being aware.
3988
3989 As with classic record locks, file-private locks are also voluntary.
3990
3991 @node Interrupt Input
3992 @section Interrupt-Driven Input
3993
3994 @cindex interrupt-driven input
3995 If you set the @code{O_ASYNC} status flag on a file descriptor
3996 (@pxref{File Status Flags}), a @code{SIGIO} signal is sent whenever
3997 input or output becomes possible on that file descriptor.  The process
3998 or process group to receive the signal can be selected by using the
3999 @code{F_SETOWN} command to the @code{fcntl} function.  If the file
4000 descriptor is a socket, this also selects the recipient of @code{SIGURG}
4001 signals that are delivered when out-of-band data arrives on that socket;
4002 see @ref{Out-of-Band Data}.  (@code{SIGURG} is sent in any situation
4003 where @code{select} would report the socket as having an ``exceptional
4004 condition''.  @xref{Waiting for I/O}.)
4005
4006 If the file descriptor corresponds to a terminal device, then @code{SIGIO}
4007 signals are sent to the foreground process group of the terminal.
4008 @xref{Job Control}.
4009
4010 @pindex fcntl.h
4011 The symbols in this section are defined in the header file
4012 @file{fcntl.h}.
4013
4014 @comment fcntl.h
4015 @comment BSD
4016 @deftypevr Macro int F_GETOWN
4017 This macro is used as the @var{command} argument to @code{fcntl}, to
4018 specify that it should get information about the process or process
4019 group to which @code{SIGIO} signals are sent.  (For a terminal, this is
4020 actually the foreground process group ID, which you can get using
4021 @code{tcgetpgrp}; see @ref{Terminal Access Functions}.)
4022
4023 The return value is interpreted as a process ID; if negative, its
4024 absolute value is the process group ID.
4025
4026 The following @code{errno} error condition is defined for this command:
4027
4028 @table @code
4029 @item EBADF
4030 The @var{filedes} argument is invalid.
4031 @end table
4032 @end deftypevr
4033
4034 @comment fcntl.h
4035 @comment BSD
4036 @deftypevr Macro int F_SETOWN
4037 This macro is used as the @var{command} argument to @code{fcntl}, to
4038 specify that it should set the process or process group to which
4039 @code{SIGIO} signals are sent.  This command requires a third argument
4040 of type @code{pid_t} to be passed to @code{fcntl}, so that the form of
4041 the call is:
4042
4043 @smallexample
4044 fcntl (@var{filedes}, F_SETOWN, @var{pid})
4045 @end smallexample
4046
4047 The @var{pid} argument should be a process ID.  You can also pass a
4048 negative number whose absolute value is a process group ID.
4049
4050 The return value from @code{fcntl} with this command is @math{-1}
4051 in case of error and some other value if successful.  The following
4052 @code{errno} error conditions are defined for this command:
4053
4054 @table @code
4055 @item EBADF
4056 The @var{filedes} argument is invalid.
4057
4058 @item ESRCH
4059 There is no process or process group corresponding to @var{pid}.
4060 @end table
4061 @end deftypevr
4062
4063 @c ??? This section could use an example program.
4064
4065 @node IOCTLs
4066 @section Generic I/O Control operations
4067 @cindex generic i/o control operations
4068 @cindex IOCTLs
4069
4070 @gnusystems{} can handle most input/output operations on many different
4071 devices and objects in terms of a few file primitives - @code{read},
4072 @code{write} and @code{lseek}.  However, most devices also have a few
4073 peculiar operations which do not fit into this model. Such as:
4074
4075 @itemize @bullet
4076
4077 @item
4078 Changing the character font used on a terminal.
4079
4080 @item
4081 Telling a magnetic tape system to rewind or fast forward.  (Since they
4082 cannot move in byte increments, @code{lseek} is inapplicable).
4083
4084 @item
4085 Ejecting a disk from a drive.
4086
4087 @item
4088 Playing an audio track from a CD-ROM drive.
4089
4090 @item
4091 Maintaining routing tables for a network.
4092
4093 @end itemize
4094
4095 Although some such objects such as sockets and terminals
4096 @footnote{Actually, the terminal-specific functions are implemented with
4097 IOCTLs on many platforms.} have special functions of their own, it would
4098 not be practical to create functions for all these cases.
4099
4100 Instead these minor operations, known as @dfn{IOCTL}s, are assigned code
4101 numbers and multiplexed through the @code{ioctl} function, defined in
4102 @code{sys/ioctl.h}.  The code numbers themselves are defined in many
4103 different headers.
4104
4105 @comment sys/ioctl.h
4106 @comment BSD
4107 @deftypefun int ioctl (int @var{filedes}, int @var{command}, @dots{})
4108 @safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
4109
4110 The @code{ioctl} function performs the generic I/O operation
4111 @var{command} on @var{filedes}.
4112
4113 A third argument is usually present, either a single number or a pointer
4114 to a structure.  The meaning of this argument, the returned value, and
4115 any error codes depends upon the command used.  Often @math{-1} is
4116 returned for a failure.
4117
4118 @end deftypefun
4119
4120 On some systems, IOCTLs used by different devices share the same numbers.
4121 Thus, although use of an inappropriate IOCTL @emph{usually} only produces
4122 an error, you should not attempt to use device-specific IOCTLs on an
4123 unknown device.
4124
4125 Most IOCTLs are OS-specific and/or only used in special system utilities,
4126 and are thus beyond the scope of this document.  For an example of the use
4127 of an IOCTL, see @ref{Out-of-Band Data}.
4128
4129 @c FIXME this is undocumented:
4130 @c dup3