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