2 .\" Copyright (c) 2008 Apple Inc. All rights reserved.
4 .\" @APPLE_LICENSE_HEADER_START@
6 .\" This file contains Original Code and/or Modifications of Original Code
7 .\" as defined in and that are subject to the Apple Public Source License
8 .\" Version 2.0 (the 'License'). You may not use this file except in
9 .\" compliance with the License. Please obtain a copy of the License at
10 .\" http://www.opensource.apple.com/apsl/ and read it before using this
13 .\" The Original Code and all software distributed under the License are
14 .\" distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 .\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 .\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 .\" FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 .\" Please see the License for the specific language governing rights and
19 .\" limitations under the License.
21 .\" @APPLE_LICENSE_HEADER_END@
24 .\" $NetBSD: fcntl.2,v 1.6 1995/02/27 12:32:29 cgd Exp $
26 .\" Copyright (c) 1983, 1993
27 .\" The Regents of the University of California. All rights reserved.
29 .\" Redistribution and use in source and binary forms, with or without
30 .\" modification, are permitted provided that the following conditions
32 .\" 1. Redistributions of source code must retain the above copyright
33 .\" notice, this list of conditions and the following disclaimer.
34 .\" 2. Redistributions in binary form must reproduce the above copyright
35 .\" notice, this list of conditions and the following disclaimer in the
36 .\" documentation and/or other materials provided with the distribution.
37 .\" 3. All advertising materials mentioning features or use of this software
38 .\" must display the following acknowledgement:
39 .\" This product includes software developed by the University of
40 .\" California, Berkeley and its contributors.
41 .\" 4. Neither the name of the University nor the names of its contributors
42 .\" may be used to endorse or promote products derived from this software
43 .\" without specific prior written permission.
45 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
46 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
47 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
48 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
49 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
50 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
51 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
53 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
54 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
57 .\" @(#)fcntl.2 8.2 (Berkeley) 1/12/94
66 .Fd #include <fcntl.h>
75 provides for control over descriptors.
78 is a descriptor to be operated on by
81 .Bl -tag -width F_WRITEBOOTSTRAPX
83 Return a new descriptor as follows:
85 .Bl -bullet -compact -offset 4n
87 Lowest numbered available descriptor greater than or equal to
90 Same object references as the original descriptor.
92 New descriptor shares the same file offset if the object
95 Same access mode (read, write or read/write).
97 Same file status flags (i.e., both file descriptors
98 share the same file status flags).
100 The close-on-exec flag associated with the new file descriptor
101 is set to remain open across
106 Get the close-on-exec flag associated with the file descriptor
108 If the low-order bit of the returned value is 0,
109 the file will remain open across
111 otherwise the file will be closed upon execution of
116 Set the close-on-exec flag associated with
118 to the low order bit of
122 Get descriptor status flags, as described below
126 Set descriptor status flags to
129 Get the process ID or process group
134 signals; process groups are returned
139 Set the process or process group
145 process groups are specified by supplying
147 as negative, otherwise
149 is interpreted as a process ID.
151 Get the path of the file descriptor
153 The argument must be a buffer of size
157 Preallocate file storage space. Note: upon success,
158 the space that is allocated can be the same size or
159 larger than the space requested.
161 Truncate a file without zeroing space.
162 The calling process must have root privileges.
164 Issue an advisory read async with no copy to user.
166 Turn read ahead off/on.
173 .It Dv F_READBOOTSTRAP
174 Read bootstrap from disk.
175 .It Dv F_WRITEBOOTSTRAP
176 Write bootstrap on disk.
177 The calling process must have root privileges.
179 Turns data caching off/on. A non-zero value in
181 turns data caching off.
184 turns data caching on.
186 Get disk device information.
187 Currently this only includes the
188 disk device address that corresponds
189 to the current file offset.
191 Does the same thing as
193 then asks the drive to
194 flush all buffered data to
195 the permanent storage device
198 This is currently implemented on HFS, MS-DOS (FAT),
199 and Universal Disk Format (UDF) file systems.
200 The operation may take quite a while to complete.
201 Certain FireWire drives have also been known
202 to ignore the request to flush their buffered data.
209 commands are as follows:
210 .Bl -tag -width O_NONBLOCKX -offset indent
212 Non-blocking I/O; if no data is available to a
216 operation would block,
217 the read or write call returns -1 with the error
220 Force each write to append at the end of file;
228 signal to be sent to the process group
229 when I/O is possible, e.g.,
230 upon availability of data to be read.
233 Several commands are available for doing advisory file locking;
234 they all operate on the following structure:
238 off_t l_start; /* starting offset */
239 off_t l_len; /* len = 0 means until end of file */
240 pid_t l_pid; /* lock owner */
241 short l_type; /* lock type: read/write, etc. */
242 short l_whence; /* type of l_start */
246 The commands available for advisory record locking are as follows:
247 .Bl -tag -width F_SETLKWX
249 Get the first lock that blocks the lock description pointed to by the
252 taken as a pointer to a
255 The information retrieved overwrites the information passed to
260 If no lock is found that would prevent this lock from being created,
261 the structure is left unchanged by this function call except for the
262 lock type which is set to
265 Set or clear a file segment lock according to the lock description
266 pointed to by the third argument,
268 taken as a pointer to a
272 is used to establish shared (or read) locks
274 or exclusive (or write) locks,
276 as well as remove either type of lock
278 If a shared or exclusive lock cannot be set,
280 returns immediately with
283 This command is the same as
285 except that if a shared or exclusive lock is blocked by other locks,
286 the process waits until the request can be satisfied.
287 If a signal that is to be caught is received while
289 is waiting for a region, the
291 will be interrupted if the signal handler has not specified the
297 When a shared lock has been set on a segment of a file,
298 other processes can set shared locks on that segment
300 A shared lock prevents any other process from setting an exclusive
301 lock on any portion of the protected area.
302 A request for a shared lock fails if the file descriptor was not
303 opened with read access.
305 An exclusive lock prevents any other process from setting a shared lock or
306 an exclusive lock on any portion of the protected area.
307 A request for an exclusive lock fails if the file was not
308 opened with write access.
317 to indicate that the relative offset,
319 bytes, will be measured from the start of the file,
320 current position, or end of the file, respectively.
323 is the number of consecutive bytes to be locked.
326 is negative, the result is undefined.
329 field is only used with
331 to return the process ID of the process holding a blocking lock.
334 request, the value of
339 Locks may start and extend beyond the current end of a file,
340 but may not start or extend before the beginning of the file.
341 A lock is set to extend to the largest possible value of the
342 file offset for that file if
348 point to the beginning of the file, and
350 is zero, the entire file is locked.
351 If an application wishes only to do entire file locking, the
353 system call is much more efficient.
355 There is at most one type of lock set for each byte in the file.
356 Before a successful return from an
360 request when the calling process has previously existing locks
361 on bytes in the region specified by the request,
362 the previous lock type for each byte in the specified
363 region is replaced by the new lock type.
364 As specified above under the descriptions
365 of shared locks and exclusive locks, an
369 request fails or blocks respectively when another process has existing
370 locks on bytes in the specified region and the type of any of those
371 locks conflicts with the type specified in the request.
373 This interface follows the completely stupid semantics of System V and
375 that require that all locks associated with a file for a given process are
376 removed when \fIany\fP file descriptor for that file is closed by that process.
377 This semantic means that applications must be aware of any files that
378 a subroutine library may access.
379 For example if an application for updating the password file locks the
380 password file database while making the update, and then calls
382 to retrieve a record,
383 the lock will be lost because
385 opens, reads, and closes the password database.
386 The database close will release all locks that the process has
387 associated with the database, even if the library routine never
388 requested a lock on the database.
389 Another minor semantic problem with this interface is that
390 locks are not inherited by a child process created using the
395 interface has much more rational last close semantics and
396 allows locks to be inherited by child processes.
398 is recommended for applications that want to ensure the integrity
399 of their locks when using library routines or wish to pass locks
405 locks may be safely used concurrently.
407 All locks associated with a file for a given process are
408 removed when the process terminates.
410 A potential for deadlock occurs if a process controlling a locked region
411 is put to sleep by attempting to lock the locked region of another process.
412 This implementation detects that sleeping until a locked region is unlocked
413 would cause a deadlock and fails with an
419 command operates on the following structure:
422 typedef struct fstore {
423 u_int32_t fst_flags; /* IN: flags word */
424 int fst_posmode; /* IN: indicates offset field */
425 off_t fst_offset; /* IN: start of the region */
426 off_t fst_length; /* IN: size of the region */
427 off_t fst_bytesalloc; /* OUT: number of bytes allocated */
431 The flags (fst_flags) for the
433 command are as follows:
434 .Bl -tag -width F_ALLOCATECONTIGX -offset indent
435 .It Dv F_ALLOCATECONTIG
436 Allocate contiguous space.
438 Allocate all requested space or no space at all.
441 The position modes (fst_posmode) for the
443 command indicate how to use the offset field.
444 The modes are as follows:
445 .Bl -tag -width F_PEOFPOSMODEX -offset indent
447 Allocate from the physical end of file.
449 Allocate from the volume offset.
454 command operates on the following structure
455 which holds information passed from the
460 off_t ra_offset; /* offset into the file */
461 int ra_count; /* size of the read */
466 .Dv F_READBOOTSTRAP and F_WRITEBOOTSTRAP
467 commands operate on the following structure.
470 typedef struct fbootstraptransfer {
471 off_t fbt_offset; /* IN: offset to start read/write */
472 size_t fbt_length; /* IN: number of bytes to transfer */
473 void *fbt_buffer; /* IN: buffer to be read/written */
474 } fbootstraptransfer_t;
479 command operates on the following structure.
483 u_int32_t l2p_flags; /* unused so far */
484 off_t l2p_contigbytes; /* unused so far */
485 off_t l2p_devoffset; /* bytes into device */
489 Upon successful completion, the value returned depends on
492 .Bl -tag -width F_GETOWNX -offset indent
494 A new file descriptor.
496 Value of flag (only the low-order bit is defined).
500 Value of file descriptor owner.
505 Otherwise, a value of -1 is returned and
507 is set to indicate the error.
511 system call will fail if:
525 and the segment of a file to be locked is already
526 exclusive-locked by another process;
527 or the type is an exclusive lock and some portion of the
528 segment of a file to be locked is already shared-locked or
529 exclusive-locked by another process.
537 and the calling process does not have root privileges.
541 is not a valid open file descriptor.
555 is not a valid file descriptor open for reading.
569 is not a valid file descriptor open for writing.
575 and the calling process does not have
576 file write permission.
584 is not a valid file descriptor open for reading.
591 and a deadlock condition was detected.
598 and the function was interrupted by a signal.
606 is negative or greater than the maximum allowable number
608 .Xr getdtablesize 2 ) .
617 and the data to which
619 points is not valid, or
621 refers to a file that does not support locking.
639 is a negative or zero value.
647 and the operation was attempted on a non-HFS disk type.
653 and the maximum allowed number of file descriptors are currently
661 and the maximum number of file descriptors permitted for the
662 process are already in use,
663 or no file descriptors greater than or equal to
674 and satisfying the lock or unlock request would result in the
675 number of locked regions in the system exceeding a system-imposed limit.
678 A return value would overflow its representation.
681 is F_GETLK, F_SETLK, or F_SETLKW
682 and the smallest (or, if l_len is non-zero, the largest) offset
683 of a byte in the requested segment
684 will not fit in an object of type off_t.
691 the process ID given as argument is not in use.
697 .Xr getdtablesize 2 ,
703 function call appeared in