· 8 years ago · Apr 26, 2018, 07:48 PM
1OPEN(2) Linux Programmer's Manual OPEN(2)
2
3NAME
4 open, openat, creat - open and possibly create a file
5
6SYNOPSIS
7 #include <sys/types.h>
8 #include <sys/stat.h>
9 #include <fcntl.h>
10
11 int open(const char *pathname, int flags);
12 int open(const char *pathname, int flags, mode_t mode);
13
14 int creat(const char *pathname, mode_t mode);
15
16 int openat(int dirfd, const char *pathname, int flags);
17 int openat(int dirfd, const char *pathname, int flags, mode_t mode);
18
19 Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
20
21 openat():
22 Since glibc 2.10:
23 _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
24 Before glibc 2.10:
25 _ATFILE_SOURCE
26
27DESCRIPTION
28 Given a pathname for a file, open() returns a file descriptor, a small, nonnegative integer for use in subsequent system calls (read(2), write(2), lseek(2),
29 fcntl(2), etc.). The file descriptor returned by a successful call will be the lowest-numbered file descriptor not currently open for the process.
30
31 By default, the new file descriptor is set to remain open across an execve(2) (i.e., the FD_CLOEXEC file descriptor flag described in fcntl(2) is initially
32 disabled); the O_CLOEXEC flag, described below, can be used to change this default. The file offset is set to the beginning of the file (see lseek(2)).
33
34 A call to open() creates a new open file description, an entry in the system-wide table of open files. The open file description records the file offset
35 and the file status flags (see below). A file descriptor is a reference to an open file description; this reference is unaffected if pathname is subseâ€
36 quently removed or modified to refer to a different file. For further details on open file descriptions, see NOTES.
37
38 The argument flags must include one of the following access modes: O_RDONLY, O_WRONLY, or O_RDWR. These request opening the file read-only, write-only, or
39 read/write, respectively.
40
41 In addition, zero or more file creation flags and file status flags can be bitwise-or'd in flags. The file creation flags are O_CLOEXEC, O_CREAT, O_DIRECâ€
42 TORY, O_EXCL, O_NOCTTY, O_NOFOLLOW, O_TMPFILE, and O_TRUNC. The file status flags are all of the remaining flags listed below. The distinction between
43 these two groups of flags is that the file status flags can be retrieved and (in some cases) modified; see fcntl(2) for details.
44
45 The full list of file creation flags and file status flags is as follows:
46
47 O_APPEND
48 The file is opened in append mode. Before each write(2), the file offset is positioned at the end of the file, as if with lseek(2). O_APPEND may
49 lead to corrupted files on NFS filesystems if more than one process appends data to a file at once. This is because NFS does not support appending
50 to a file, so the client kernel has to simulate it, which can't be done without a race condition.
51
52 O_ASYNC
53 Enable signal-driven I/O: generate a signal (SIGIO by default, but this can be changed via fcntl(2)) when input or output becomes possible on this
54 file descriptor. This feature is available only for terminals, pseudoterminals, sockets, and (since Linux 2.6) pipes and FIFOs. See fcntl(2) for
55 further details. See also BUGS, below.
56
57 O_CLOEXEC (since Linux 2.6.23)
58 Enable the close-on-exec flag for the new file descriptor. Specifying this flag permits a program to avoid additional fcntl(2) F_SETFD operations to
59 set the FD_CLOEXEC flag.
60
61 Note that the use of this flag is essential in some multithreaded programs, because using a separate fcntl(2) F_SETFD operation to set the FD_CLOEXEC
62 flag does not suffice to avoid race conditions where one thread opens a file descriptor and attempts to set its close-on-exec flag using fcntl(2) at
63 the same time as another thread does a fork(2) plus execve(2). Depending on the order of execution, the race may lead to the file descriptor
64 returned by open() being unintentionally leaked to the program executed by the child process created by fork(2). (This kind of race is in principle
65 possible for any system call that creates a file descriptor whose close-on-exec flag should be set, and various other Linux system calls provide an
66 equivalent of the O_CLOEXEC flag to deal with this problem.)
67
68 O_CREAT
69 If the file does not exist, it will be created. The owner (user ID) of the file is set to the effective user ID of the process. The group ownership
70 (group ID) is set either to the effective group ID of the process or to the group ID of the parent directory (depending on filesystem type and mount
71 options, and the mode of the parent directory; see the mount options bsdgroups and sysvgroups described in mount(8)).
72
73 mode specifies the mode to use in case a new file is created. This argument must be supplied when O_CREAT or O_TMPFILE is specified in flags; if
74 neither O_CREAT nor O_TMPFILE is specified, then mode is ignored. The effective mode is modified by the process's umask in the usual way: in the
75 absence of a default ACL, the mode of the created file is (mode & ~umask). Note that this mode applies only to future accesses of the newly created
76 file; the open() call that creates a read-only file may well return a read/write file descriptor.
77
78 The following symbolic constants are provided for mode:
79
80 S_IRWXU 00700 user (file owner) has read, write, and execute permission
81
82 S_IRUSR 00400 user has read permission
83
84 S_IWUSR 00200 user has write permission
85
86 S_IXUSR 00100 user has execute permission
87
88 S_IRWXG 00070 group has read, write, and execute permission
89
90 S_IRGRP 00040 group has read permission
91
92 S_IWGRP 00020 group has write permission
93
94 S_IXGRP 00010 group has execute permission
95
96 S_IRWXO 00007 others have read, write, and execute permission
97
98 S_IROTH 00004 others have read permission
99
100 S_IWOTH 00002 others have write permission
101
102 S_IXOTH 00001 others have execute permission
103
104 According to POSIX, the effect when other bits are set in mode is unspecified. On Linux, the following bits are also honored in mode:
105
106 S_ISUID 0004000 set-user-ID bit
107
108 S_ISGID 0002000 set-group-ID bit (see stat(2))
109
110 S_ISVTX 0001000 sticky bit (see stat(2))
111
112 O_DIRECT (since Linux 2.4.10)
113 Try to minimize cache effects of the I/O to and from this file. In general this will degrade performance, but it is useful in special situations,
114 such as when applications do their own caching. File I/O is done directly to/from user-space buffers. The O_DIRECT flag on its own makes an effort
115 to transfer data synchronously, but does not give the guarantees of the O_SYNC flag that data and necessary metadata are transferred. To guarantee
116 synchronous I/O, O_SYNC must be used in addition to O_DIRECT. See NOTES below for further discussion.
117
118 A semantically similar (but deprecated) interface for block devices is described in raw(8).
119
120 O_DIRECTORY
121 If pathname is not a directory, cause the open to fail. This flag was added in kernel version 2.1.126, to avoid denial-of-service problems if
122 opendir(3) is called on a FIFO or tape device.
123
124 O_DSYNC
125 Write operations on the file will complete according to the requirements of synchronized I/O data integrity completion.
126
127 By the time write(2) (and similar) return, the output data has been transferred to the underlying hardware, along with any file metadata that would
128 be required to retrieve that data (i.e., as though each write(2) was followed by a call to fdatasync(2)). See NOTES below.
129
130 O_EXCL Ensure that this call creates the file: if this flag is specified in conjunction with O_CREAT, and pathname already exists, then open() will fail.
131
132 When these two flags are specified, symbolic links are not followed: if pathname is a symbolic link, then open() fails regardless of where the symâ€
133 bolic link points to.
134
135 In general, the behavior of O_EXCL is undefined if it is used without O_CREAT. There is one exception: on Linux 2.6 and later, O_EXCL can be used
136 without O_CREAT if pathname refers to a block device. If the block device is in use by the system (e.g., mounted), open() fails with the error
137 EBUSY.
138
139 On NFS, O_EXCL is supported only when using NFSv3 or later on kernel 2.6 or later. In NFS environments where O_EXCL support is not provided, proâ€
140 grams that rely on it for performing locking tasks will contain a race condition. Portable programs that want to perform atomic file locking using a
141 lockfile, and need to avoid reliance on NFS support for O_EXCL, can create a unique file on the same filesystem (e.g., incorporating hostname and
142 PID), and use link(2) to make a link to the lockfile. If link(2) returns 0, the lock is successful. Otherwise, use stat(2) on the unique file to
143 check if its link count has increased to 2, in which case the lock is also successful.
144
145 O_LARGEFILE
146 (LFS) Allow files whose sizes cannot be represented in an off_t (but can be represented in an off64_t) to be opened. The _LARGEFILE64_SOURCE macro
147 must be defined (before including any header files) in order to obtain this definition. Setting the _FILE_OFFSET_BITS feature test macro to 64
148 (rather than using O_LARGEFILE) is the preferred method of accessing large files on 32-bit systems (see feature_test_macros(7)).
149
150 O_NOATIME (since Linux 2.6.8)
151 Do not update the file last access time (st_atime in the inode) when the file is read(2). This flag is intended for use by indexing or backup proâ€
152 grams, where its use can significantly reduce the amount of disk activity. This flag may not be effective on all filesystems. One example is NFS,
153 where the server maintains the access time.
154
155 O_NOCTTY
156 If pathname refers to a terminal device—see tty(4)—it will not become the process's controlling terminal even if the process does not have one.
157
158 O_NOFOLLOW
159 If pathname is a symbolic link, then the open fails. This is a FreeBSD extension, which was added to Linux in version 2.1.126. Symbolic links in
160 earlier components of the pathname will still be followed. See also O_PATH below.
161
162 O_NONBLOCK or O_NDELAY
163 When possible, the file is opened in nonblocking mode. Neither the open() nor any subsequent operations on the file descriptor which is returned
164 will cause the calling process to wait.
165
166 Note that this flag has no effect for regular files and block devices; that is, I/O operations will (briefly) block when device activity is required,
167 regardless of whether O_NONBLOCK is set. Since O_NONBLOCK semantics might eventually be implemented, applications should not depend upon blocking
168 behavior when specifying this flag for regular files and block devices.
169
170 For the handling of FIFOs (named pipes), see also fifo(7). For a discussion of the effect of O_NONBLOCK in conjunction with mandatory file locks and
171 with file leases, see fcntl(2).
172
173 O_PATH (since Linux 2.6.39)
174 Obtain a file descriptor that can be used for two purposes: to indicate a location in the filesystem tree and to perform operations that act purely
175 at the file descriptor level. The file itself is not opened, and other file operations (e.g., read(2), write(2), fchmod(2), fchown(2), fgetxattr(2),
176 mmap(2)) fail with the error EBADF.
177
178 The following operations can be performed on the resulting file descriptor:
179
180 * close(2); fchdir(2) (since Linux 3.5); fstat(2) (since Linux 3.6).
181
182 * Duplicating the file descriptor (dup(2), fcntl(2) F_DUPFD, etc.).
183
184 * Getting and setting file descriptor flags (fcntl(2) F_GETFD and F_SETFD).
185
186 * Retrieving open file status flags using the fcntl(2) F_GETFL operation: the returned flags will include the bit O_PATH.
187
188 * Passing the file descriptor as the dirfd argument of openat(2) and the other "*at()" system calls. This includes linkat(2) with AT_EMPTY_PATH (or
189 via procfs using AT_SYMLINK_FOLLOW) even if the file is not a directory.
190
191 * Passing the file descriptor to another process via a UNIX domain socket (see SCM_RIGHTS in unix(7)).
192
193 When O_PATH is specified in flags, flag bits other than O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW are ignored.
194
195 If pathname is a symbolic link and the O_NOFOLLOW flag is also specified, then the call returns a file descriptor referring to the symbolic link.
196 This file descriptor can be used as the dirfd argument in calls to fchownat(2), fstatat(2), linkat(2), and readlinkat(2) with an empty pathname to
197 have the calls operate on the symbolic link.
198
199 O_SYNC Write operations on the file will complete according to the requirements of synchronized I/O file integrity completion (by contrast with the synchroâ€
200 nized I/O data integrity completion provided by O_DSYNC.)
201
202 By the time write(2) (and similar) return, the output data and associated file metadata have been transferred to the underlying hardware (i.e., as
203 though each write(2) was followed by a call to fsync(2)). See NOTES below.
204
205 O_TMPFILE (since Linux 3.11)
206 Create an unnamed temporary file. The pathname argument specifies a directory; an unnamed inode will be created in that directory's filesystem.
207 Anything written to the resulting file will be lost when the last file descriptor is closed, unless the file is given a name.
208
209 O_TMPFILE must be specified with one of O_RDWR or O_WRONLY and, optionally, O_EXCL. If O_EXCL is not specified, then linkat(2) can be used to link
210 the temporary file into the filesystem, making it permanent, using code like the following:
211
212 char path[PATH_MAX];
213 fd = open("/path/to/dir", O_TMPFILE | O_RDWR,
214 S_IRUSR | S_IWUSR);
215
216 /* File I/O on 'fd'... */
217
218 snprintf(path, PATH_MAX, "/proc/self/fd/%d", fd);
219 linkat(AT_FDCWD, path, AT_FDCWD, "/path/for/file",
220 AT_SYMLINK_FOLLOW);
221
222 In this case, the open() mode argument determines the file permission mode, as with O_CREAT.
223
224 Specifying O_EXCL in conjunction with O_TMPFILE prevents a temporary file from being linked into the filesystem in the above manner. (Note that the
225 meaning of O_EXCL in this case is different from the meaning of O_EXCL otherwise.)
226
227 There are two main use cases for O_TMPFILE:
228
229 * Improved tmpfile(3) functionality: race-free creation of temporary files that (1) are automatically deleted when closed; (2) can never be reached
230 via any pathname; (3) are not subject to symlink attacks; and (4) do not require the caller to devise unique names.
231
232 * Creating a file that is initially invisible, which is then populated with data and adjusted to have appropriate filesystem attributes (chown(2),
233 chmod(2), fsetxattr(2), etc.) before being atomically linked into the filesystem in a fully formed state (using linkat(2) as described above).
234
235 O_TMPFILE requires support by the underlying filesystem; only a subset of Linux filesystems provide that support. In the initial implementation,
236 support was provided in the ext2, ext3, ext4, UDF, Minix, and shmem filesystems. XFS support was added in Linux 3.15.
237
238 O_TRUNC
239 If the file already exists and is a regular file and the access mode allows writing (i.e., is O_RDWR or O_WRONLY) it will be truncated to length 0.
240 If the file is a FIFO or terminal device file, the O_TRUNC flag is ignored. Otherwise, the effect of O_TRUNC is unspecified.
241
242 creat()
243 creat() is equivalent to open() with flags equal to O_CREAT|O_WRONLY|O_TRUNC.
244
245 openat()
246 The openat() system call operates in exactly the same way as open(), except for the differences described here.
247
248 If the pathname given in pathname is relative, then it is interpreted relative to the directory referred to by the file descriptor dirfd (rather than relaâ€
249 tive to the current working directory of the calling process, as is done by open() for a relative pathname).
250
251 If pathname is relative and dirfd is the special value AT_FDCWD, then pathname is interpreted relative to the current working directory of the calling
252 process (like open()).
253
254 If pathname is absolute, then dirfd is ignored.
255
256RETURN VALUE
257 open(), openat(), and creat() return the new file descriptor, or -1 if an error occurred (in which case, errno is set appropriately).
258
259ERRORS
260 open(), openat(), and creat() can fail with the following errors:
261
262 EACCES The requested access to the file is not allowed, or search permission is denied for one of the directories in the path prefix of pathname, or the
263 file did not exist yet and write access to the parent directory is not allowed. (See also path_resolution(7).)
264
265 EDQUOT Where O_CREAT is specified, the file does not exist, and the user's quota of disk blocks or inodes on the filesystem has been exhausted.
266
267 EEXIST pathname already exists and O_CREAT and O_EXCL were used.
268
269 EFAULT pathname points outside your accessible address space.
270
271 EFBIG See EOVERFLOW.
272
273 EINTR While blocked waiting to complete an open of a slow device (e.g., a FIFO; see fifo(7)), the call was interrupted by a signal handler; see signal(7).
274
275 EINVAL The filesystem does not support the O_DIRECT flag. See NOTES for more information.
276
277 EINVAL Invalid value in flags.
278
279 EINVAL O_TMPFILE was specified in flags, but neither O_WRONLY nor O_RDWR was specified.
280
281 EISDIR pathname refers to a directory and the access requested involved writing (that is, O_WRONLY or O_RDWR is set).
282
283 EISDIR pathname refers to an existing directory, O_TMPFILE and one of O_WRONLY or O_RDWR were specified in flags, but this kernel version does not provide
284 the O_TMPFILE functionality.
285
286 ELOOP Too many symbolic links were encountered in resolving pathname.
287
288 ELOOP pathname was a symbolic link, and flags specified O_NOFOLLOW but not O_PATH.
289
290 EMFILE The per-process limit on the number of open file descriptors has been reached (see the description of RLIMIT_NOFILE in getrlimit(2)).
291
292 ENAMETOOLONG
293 pathname was too long.
294
295 ENFILE The system-wide limit on the total number of open files has been reached.
296
297 ENODEV pathname refers to a device special file and no corresponding device exists. (This is a Linux kernel bug; in this situation ENXIO must be returned.)
298
299 ENOENT O_CREAT is not set and the named file does not exist. Or, a directory component in pathname does not exist or is a dangling symbolic link.
300
301 ENOENT pathname refers to a nonexistent directory, O_TMPFILE and one of O_WRONLY or O_RDWR were specified in flags, but this kernel version does not provide
302 the O_TMPFILE functionality.
303
304 ENOMEM Insufficient kernel memory was available.
305
306 ENOSPC pathname was to be created but the device containing pathname has no room for the new file.
307
308 ENOTDIR
309 A component used as a directory in pathname is not, in fact, a directory, or O_DIRECTORY was specified and pathname was not a directory.
310
311 ENXIO O_NONBLOCK | O_WRONLY is set, the named file is a FIFO, and no process has the FIFO open for reading. Or, the file is a device special file and no
312 corresponding device exists.
313
314 EOPNOTSUPP
315 The filesystem containing pathname does not support O_TMPFILE.
316
317 EOVERFLOW
318 pathname refers to a regular file that is too large to be opened. The usual scenario here is that an application compiled on a 32-bit platform withâ€
319 out -D_FILE_OFFSET_BITS=64 tried to open a file whose size exceeds (1<<31)-1 bytes; see also O_LARGEFILE above. This is the error specified by
320 POSIX.1; in kernels before 2.6.24, Linux gave the error EFBIG for this case.
321
322 EPERM The O_NOATIME flag was specified, but the effective user ID of the caller did not match the owner of the file and the caller was not privileged
323 (CAP_FOWNER).
324
325 EPERM The operation was prevented by a file seal; see fcntl(2).
326
327 EROFS pathname refers to a file on a read-only filesystem and write access was requested.
328
329 ETXTBSY
330 pathname refers to an executable image which is currently being executed and write access was requested.
331
332 EWOULDBLOCK
333 The O_NONBLOCK flag was specified, and an incompatible lease was held on the file (see fcntl(2)).
334
335 The following additional errors can occur for openat():
336
337 EBADF dirfd is not a valid file descriptor.
338
339 ENOTDIR
340 pathname is a relative pathname and dirfd is a file descriptor referring to a file other than a directory.
341
342VERSIONS
343 openat() was added to Linux in kernel 2.6.16; library support was added to glibc in version 2.4.
344
345CONFORMING TO
346 open(), creat() SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
347
348 openat(): POSIX.1-2008.
349
350 The O_DIRECT, O_NOATIME, O_PATH, and O_TMPFILE flags are Linux-specific. One must define _GNU_SOURCE to obtain their definitions.
351
352 The O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags are not specified in POSIX.1-2001, but are specified in POSIX.1-2008. Since glibc 2.12, one can obtain
353 their definitions by defining either _POSIX_C_SOURCE with a value greater than or equal to 200809L or _XOPEN_SOURCE with a value greater than or equal to
354 700. In glibc 2.11 and earlier, one obtains the definitions by defining _GNU_SOURCE.
355
356 As noted in feature_test_macros(7), feature test macros such as _POSIX_C_SOURCE, _XOPEN_SOURCE, and _GNU_SOURCE must be defined before including any header
357 files.
358
359NOTES
360 Under Linux, the O_NONBLOCK flag indicates that one wants to open but does not necessarily have the intention to read or write. This is typically used to
361 open devices in order to get a file descriptor for use with ioctl(2).
362
363 The (undefined) effect of O_RDONLY | O_TRUNC varies among implementations. On many systems the file is actually truncated.
364
365 Note that open() can open device special files, but creat() cannot create them; use mknod(2) instead.
366
367 If the file is newly created, its st_atime, st_ctime, st_mtime fields (respectively, time of last access, time of last status change, and time of last modiâ€
368 fication; see stat(2)) are set to the current time, and so are the st_ctime and st_mtime fields of the parent directory. Otherwise, if the file is modified
369 because of the O_TRUNC flag, its st_ctime and st_mtime fields are set to the current time.
370
371 Open file descriptions
372 The term open file description is the one used by POSIX to refer to the entries in the system-wide table of open files. In other contexts, this object is
373 variously also called an "open file object", a "file handle", an "open file table entry", or—in kernel-developer parlance—a struct file.
374
375 When a file descriptor is duplicated (using dup(2) or similar), the duplicate refers to the same open file description as the original file descriptor, and
376 the two file descriptors consequently share the file offset and file status flags. Such sharing can also occur between processes: a child process created
377 via fork(2) inherits duplicates of its parent's file descriptors, and those duplicates refer to the same open file descriptions.
378
379 Each open(2) of a file creates a new open file description; thus, there may be multiple open file descriptions corresponding to a file inode.
380
381 Synchronized I/O
382 The POSIX.1-2008 "synchronized I/O" option specifies different variants of synchronized I/O, and specifies the open() flags O_SYNC, O_DSYNC, and O_RSYNC for
383 controlling the behavior. Regardless of whether an implementation supports this option, it must at least support the use of O_SYNC for regular files.
384
385 Linux implements O_SYNC and O_DSYNC, but not O_RSYNC. (Somewhat incorrectly, glibc defines O_RSYNC to have the same value as O_SYNC.)
386
387 O_SYNC provides synchronized I/O file integrity completion, meaning write operations will flush data and all associated metadata to the underlying hardware.
388 O_DSYNC provides synchronized I/O data integrity completion, meaning write operations will flush data to the underlying hardware, but will only flush metaâ€
389 data updates that are required to allow a subsequent read operation to complete successfully. Data integrity completion can reduce the number of disk operâ€
390 ations that are required for applications that don't need the guarantees of file integrity completion.
391
392 To understand the difference between the two types of completion, consider two pieces of file metadata: the file last modification timestamp (st_mtime) and
393 the file length. All write operations will update the last file modification timestamp, but only writes that add data to the end of the file will change
394 the file length. The last modification timestamp is not needed to ensure that a read completes successfully, but the file length is. Thus, O_DSYNC would
395 only guarantee to flush updates to the file length metadata (whereas O_SYNC would also always flush the last modification timestamp metadata).
396
397 Before Linux 2.6.33, Linux implemented only the O_SYNC flag for open(). However, when that flag was specified, most filesystems actually provided the
398 equivalent of synchronized I/O data integrity completion (i.e., O_SYNC was actually implemented as the equivalent of O_DSYNC).
399
400 Since Linux 2.6.33, proper O_SYNC support is provided. However, to ensure backward binary compatibility, O_DSYNC was defined with the same value as the
401 historical O_SYNC, and O_SYNC was defined as a new (two-bit) flag value that includes the O_DSYNC flag value. This ensures that applications compiled
402 against new headers get at least O_DSYNC semantics on pre-2.6.33 kernels.
403
404 NFS
405 There are many infelicities in the protocol underlying NFS, affecting amongst others O_SYNC and O_NDELAY.
406
407 On NFS filesystems with UID mapping enabled, open() may return a file descriptor but, for example, read(2) requests are denied with EACCES. This is because
408 the client performs open() by checking the permissions, but UID mapping is performed by the server upon read and write requests.
409
410 FIFOs
411 Opening the read or write end of a FIFO blocks until the other end is also opened (by another process or thread). See fifo(7) for further details.
412
413 File access mode
414 Unlike the other values that can be specified in flags, the access mode values O_RDONLY, O_WRONLY, and O_RDWR do not specify individual bits. Rather, they
415 define the low order two bits of flags, and are defined respectively as 0, 1, and 2. In other words, the combination O_RDONLY | O_WRONLY is a logical
416 error, and certainly does not have the same meaning as O_RDWR.
417
418 Linux reserves the special, nonstandard access mode 3 (binary 11) in flags to mean: check for read and write permission on the file and return a descriptor
419 that can't be used for reading or writing. This nonstandard access mode is used by some Linux drivers to return a descriptor that is to be used only for
420 device-specific ioctl(2) operations.
421
422 Rationale for openat() and other directory file descriptor APIs
423 openat() and the other system calls and library functions that take a directory file descriptor argument (i.e., execveat(2), faccessat(2), fanotify_mark(2),
424 fchmodat(2), fchownat(2), fstatat(2), futimesat(2), linkat(2), mkdirat(2), mknodat(2), name_to_handle_at(2), readlinkat(2), renameat(2), symlinkat(2),
425 unlinkat(2), utimensat(2), mkfifoat(3), and scandirat(3)) are supported for two reasons. Here, the explanation is in terms of the openat() call, but the
426 rationale is analogous for the other interfaces.
427
428 First, openat() allows an application to avoid race conditions that could occur when using open() to open files in directories other than the current workâ€
429 ing directory. These race conditions result from the fact that some component of the directory prefix given to open() could be changed in parallel with the
430 call to open(). Suppose, for example, that we wish to create the file path/to/xxx.dep if the file path/to/xxx exists. The problem is that between the
431 existence check and the file creation step, path or to (which might be symbolic links) could be modified to point to a different location. Such races can
432 be avoided by opening a file descriptor for the target directory, and then specifying that file descriptor as the dirfd argument of (say) fstatat(2) and
433 openat().
434
435 Second, openat() allows the implementation of a per-thread "current working directory", via file descriptor(s) maintained by the application. (This funcâ€
436 tionality can also be obtained by tricks based on the use of /proc/self/fd/dirfd, but less efficiently.)
437
438 O_DIRECT
439 The O_DIRECT flag may impose alignment restrictions on the length and address of user-space buffers and the file offset of I/Os. In Linux alignment
440 restrictions vary by filesystem and kernel version and might be absent entirely. However there is currently no filesystem-independent interface for an
441 application to discover these restrictions for a given file or filesystem. Some filesystems provide their own interfaces for doing so, for example the
442 XFS_IOC_DIOINFO operation in xfsctl(3).
443
444 Under Linux 2.4, transfer sizes, and the alignment of the user buffer and the file offset must all be multiples of the logical block size of the filesystem.
445 Since Linux 2.6.0, alignment to the logical block size of the underlying storage (typically 512 bytes) suffices. The logical block size can be determined
446 using the ioctl(2) BLKSSZGET operation or from the shell using the command:
447
448 blockdev --getss
449
450 O_DIRECT I/Os should never be run concurrently with the fork(2) system call, if the memory buffer is a private mapping (i.e., any mapping created with the
451 mmap(2) MAP_PRIVATE flag; this includes memory allocated on the heap and statically allocated buffers). Any such I/Os, whether submitted via an asynchroâ€
452 nous I/O interface or from another thread in the process, should be completed before fork(2) is called. Failure to do so can result in data corruption and
453 undefined behavior in parent and child processes. This restriction does not apply when the memory buffer for the O_DIRECT I/Os was created using shmat(2)
454 or mmap(2) with the MAP_SHARED flag. Nor does this restriction apply when the memory buffer has been advised as MADV_DONTFORK with madvise(2), ensuring
455 that it will not be available to the child after fork(2).
456
457 The O_DIRECT flag was introduced in SGI IRIX, where it has alignment restrictions similar to those of Linux 2.4. IRIX has also a fcntl(2) call to query
458 appropriate alignments, and sizes. FreeBSD 4.x introduced a flag of the same name, but without alignment restrictions.
459
460 O_DIRECT support was added under Linux in kernel version 2.4.10. Older Linux kernels simply ignore this flag. Some filesystems may not implement the flag
461 and open() will fail with EINVAL if it is used.
462
463 Applications should avoid mixing O_DIRECT and normal I/O to the same file, and especially to overlapping byte regions in the same file. Even when the
464 filesystem correctly handles the coherency issues in this situation, overall I/O throughput is likely to be slower than using either mode alone. Likewise,
465 applications should avoid mixing mmap(2) of files with direct I/O to the same files.
466
467 The behavior of O_DIRECT with NFS will differ from local filesystems. Older kernels, or kernels configured in certain ways, may not support this combinaâ€
468 tion. The NFS protocol does not support passing the flag to the server, so O_DIRECT I/O will bypass the page cache only on the client; the server may still
469 cache the I/O. The client asks the server to make the I/O synchronous to preserve the synchronous semantics of O_DIRECT. Some servers will perform poorly
470 under these circumstances, especially if the I/O size is small. Some servers may also be configured to lie to clients about the I/O having reached stable
471 storage; this will avoid the performance penalty at some risk to data integrity in the event of server power failure. The Linux NFS client places no alignâ€
472 ment restrictions on O_DIRECT I/O.
473
474 In summary, O_DIRECT is a potentially powerful tool that should be used with caution. It is recommended that applications treat use of O_DIRECT as a perâ€
475 formance option which is disabled by default.
476
477 "The thing that has always disturbed me about O_DIRECT is that the whole interface is just stupid, and was probably designed by a deranged monkey on
478 some serious mind-controlling substances."—Linus
479
480BUGS
481 Currently, it is not possible to enable signal-driven I/O by specifying O_ASYNC when calling open(); use fcntl(2) to enable this flag.
482
483 One must check for two different error codes, EISDIR and ENOENT, when trying to determine whether the kernel supports O_TMPFILE functionality.
484
485 When both O_CREAT and O_DIRECTORY are specified in flags and the file specified by pathname does not exist, open() will create a regular file (i.e.,
486 O_DIRECTORY is ignored).
487
488SEE ALSO
489 chmod(2), chown(2), close(2), dup(2), fcntl(2), link(2), lseek(2), mknod(2), mmap(2), mount(2), open_by_handle_at(2), read(2), socket(2), stat(2), umask(2),
490 unlink(2), write(2), fopen(3), acl(5) fifo(7), path_resolution(7), symlink(7)
491
492COLOPHON
493 This page is part of release 4.04 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of
494 this page, can be found at http://www.kernel.org/doc/man-pages/.
495
496
497
498
499
500
501
502
503
504
505
506
507
508Linux 2015-12-05 OPEN(2)
509WRITE(2) Linux Programmer's Manual WRITE(2)
510
511NAME
512 write - write to a file descriptor
513
514SYNOPSIS
515 #include <unistd.h>
516
517 ssize_t write(int fd, const void *buf, size_t count);
518
519DESCRIPTION
520 write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd.
521
522 The number of bytes written may be less than count if, for example, there is insufficient space on the underlying physical medium, or the RLIMIT_FSIZE
523 resource limit is encountered (see setrlimit(2)), or the call was interrupted by a signal handler after having written less than count bytes. (See also
524 pipe(7).)
525
526 For a seekable file (i.e., one to which lseek(2) may be applied, for example, a regular file) writing takes place at the current file offset, and the file
527 offset is incremented by the number of bytes actually written. If the file was open(2)ed with O_APPEND, the file offset is first set to the end of the file
528 before writing. The adjustment of the file offset and the write operation are performed as an atomic step.
529
530 POSIX requires that a read(2) which can be proved to occur after a write() has returned returns the new data. Note that not all filesystems are POSIX conâ€
531 forming.
532
533RETURN VALUE
534 On success, the number of bytes written is returned (zero indicates nothing was written). It is not an error if this number is smaller than the number of
535 bytes requested; this may happen for example because the disk device was filled. See also NOTES.
536
537 On error, -1 is returned, and errno is set appropriately.
538
539 If count is zero and fd refers to a regular file, then write() may return a failure status if one of the errors below is detected. If no errors are
540 detected, or error detection is not performed, 0 will be returned without causing any other effect. If count is zero and fd refers to a file other than a
541 regular file, the results are not specified.
542
543ERRORS
544 EAGAIN The file descriptor fd refers to a file other than a socket and has been marked nonblocking (O_NONBLOCK), and the write would block. See open(2) for
545 further details on the O_NONBLOCK flag.
546
547 EAGAIN or EWOULDBLOCK
548 The file descriptor fd refers to a socket and has been marked nonblocking (O_NONBLOCK), and the write would block. POSIX.1-2001 allows either error
549 to be returned for this case, and does not require these constants to have the same value, so a portable application should check for both possibiliâ€
550 ties.
551
552 EBADF fd is not a valid file descriptor or is not open for writing.
553
554 EDESTADDRREQ
555 fd refers to a datagram socket for which a peer address has not been set using connect(2).
556
557 EDQUOT The user's quota of disk blocks on the filesystem containing the file referred to by fd has been exhausted.
558
559 EFAULT buf is outside your accessible address space.
560
561 EFBIG An attempt was made to write a file that exceeds the implementation-defined maximum file size or the process's file size limit, or to write at a
562 position past the maximum allowed offset.
563
564 EINTR The call was interrupted by a signal before any data was written; see signal(7).
565
566 EINVAL fd is attached to an object which is unsuitable for writing; or the file was opened with the O_DIRECT flag, and either the address specified in buf,
567 the value specified in count, or the current file offset is not suitably aligned.
568
569 EIO A low-level I/O error occurred while modifying the inode.
570
571 ENOSPC The device containing the file referred to by fd has no room for the data.
572
573 EPERM The operation was prevented by a file seal; see fcntl(2).
574
575 EPIPE fd is connected to a pipe or socket whose reading end is closed. When this happens the writing process will also receive a SIGPIPE signal. (Thus,
576 the write return value is seen only if the program catches, blocks or ignores this signal.)
577
578 Other errors may occur, depending on the object connected to fd.
579
580CONFORMING TO
581 SVr4, 4.3BSD, POSIX.1-2001.
582
583 Under SVr4 a write may be interrupted and return EINTR at any point, not just before any data is written.
584
585NOTES
586 A successful return from write() does not make any guarantee that data has been committed to disk. In fact, on some buggy implementations, it does not even
587 guarantee that space has successfully been reserved for the data. The only way to be sure is to call fsync(2) after you are done writing all your data.
588
589 If a write() is interrupted by a signal handler before any bytes are written, then the call fails with the error EINTR; if it is interrupted after at least
590 one byte has been written, the call succeeds, and returns the number of bytes written.
591
592 On Linux, write() (and similar system calls) will transfer at most 0x7ffff000 (2,147,479,552) bytes, returning the number of bytes actually transferred.
593 (This is true on both 32-bit and 64-bit systems.)
594
595BUGS
596 According to POSIX.1-2008/SUSv4 Section XSI 2.9.7 ("Thread Interactions with Regular File Operations"):
597
598 All of the following functions shall be atomic with respect to each other in the effects specified in POSIX.1-2008 when they operate on regular files or
599 symbolic links: ...
600
601 Among the APIs subsequently listed are write() and writev(2). And among the effects that should be atomic across threads (and processes) are updates of the
602 file offset. However, on Linux before version 3.14, this was not the case: if two processes that share an open file description (see open(2)) perform a
603 write() (or writev(2)) at the same time, then the I/O operations were not atomic with respect updating the file offset, with the result that the blocks of
604 data output by the two processes might (incorrectly) overlap. This problem was fixed in Linux 3.14.
605
606SEE ALSO
607 close(2), fcntl(2), fsync(2), ioctl(2), lseek(2), open(2), pwrite(2), read(2), select(2), writev(2), fwrite(3)
608
609COLOPHON
610 This page is part of release 4.04 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of
611 this page, can be found at http://www.kernel.org/doc/man-pages/.
612
613Linux 2015-07-23 WRITE(2)