Print this page
14249 pseudo-terminal nomenclature should reflect POSIX
Change-Id: Ib4a3cef899ff4c71b09cb0dc6878863c5e8357bc
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/man/man2/open.2.man.txt
+++ new/usr/src/man/man2/open.2.man.txt
1 1 OPEN(2) System Calls OPEN(2)
2 2
3 3 NAME
4 - open, openat - open a file
4 + open, openat - open a file
5 5
6 6 SYNOPSIS
7 - #include <sys/types.h>
8 - #include <sys/stat.h>
9 - #include <fcntl.h>
7 + #include <sys/types.h>
8 + #include <sys/stat.h>
9 + #include <fcntl.h>
10 10
11 - int open(const char *path, int oflag, /* mode_t mode */);
11 + int
12 + open(const char *path, int oflag [, mode_t mode]);
12 13
14 + int
15 + openat(int fildes, const char *path, int oflag [, mode_t mode]);
13 16
14 - int openat(int fildes, const char *path, int oflag,
15 - /* mode_t mode */);
16 -
17 -
18 17 DESCRIPTION
19 - The open() function establishes the connection between a file and a
20 - file descriptor. It creates an open file description that refers to a
21 - file and a file descriptor that refers to that open file description.
22 - The file descriptor is used by other I/O functions to refer to that
23 - file. The path argument points to a pathname naming the file.
18 + The open() function establishes the connection between a file and a file
19 + descriptor. It creates an open file description that refers to a file
20 + and a file descriptor that refers to that open file description. The
21 + file descriptor is used by other I/O functions to refer to that file.
22 + The path argument points to a pathname naming the file.
24 23
24 + The openat() function is identical to the open() function except that the
25 + path argument is interpreted relative to the starting point implied by
26 + the fildes argument. If the fildes argument has the special value
27 + AT_FDCWD, a relative path argument will be resolved relative to the
28 + current working directory. If the path argument is absolute, the fildes
29 + argument is ignored.
25 30
26 - The openat() function is identical to the open() function except that
27 - the path argument is interpreted relative to the starting point implied
28 - by the fildes argument. If the fildes argument has the special value
29 - AT_FDCWD, a relative path argument will be resolved relative to the
30 - current working directory. If the path argument is absolute, the fildes
31 - argument is ignored.
31 + The open() function returns a file descriptor for the named file that is
32 + the lowest file descriptor not currently open for that process. The open
33 + file description is new, and therefore the file descriptor does not share
34 + it with any other process in the system. The FD_CLOEXEC file descriptor
35 + flag associated with the new file descriptor is cleared.
32 36
37 + The file offset used to mark the current position within the file is set
38 + to the beginning of the file.
33 39
34 - The open() function returns a file descriptor for the named file that
35 - is the lowest file descriptor not currently open for that process. The
36 - open file description is new, and therefore the file descriptor does
37 - not share it with any other process in the system. The FD_CLOEXEC file
38 - descriptor flag associated with the new file descriptor is cleared.
40 + The file status flags and file access modes of the open file description
41 + are set according to the value of oflag. The mode argument is used only
42 + when O_CREAT is specified (see below).
39 43
44 + Values for oflag are constructed by a bitwise-inclusive-OR of flags from
45 + the following list, defined in fcntl.h(3HEAD). Applications must specify
46 + exactly one of the first three values (file access modes) below in the
47 + value of oflag:
40 48
41 - The file offset used to mark the current position within the file is
42 - set to the beginning of the file.
49 + O_RDONLY
50 + Open for reading only.
43 51
52 + O_WRONLY
53 + Open for writing only.
44 54
45 - The file status flags and file access modes of the open file
46 - description are set according to the value of oflag. The mode argument
47 - is used only when O_CREAT is specified (see below.)
55 + O_RDWR Open for reading and writing. The result is undefined if this
56 + flag is applied to a FIFO.
48 57
58 + Any combination of the following may be used:
49 59
50 - Values for oflag are constructed by a bitwise-inclusive-OR of flags
51 - from the following list, defined in <fcntl.h>. Applications must
52 - specify exactly one of the first three values (file access modes) below
53 - in the value of oflag:
60 + O_APPEND
61 + If set, the file offset is set to the end of the file prior to
62 + each write.
54 63
55 - O_RDONLY
56 - Open for reading only.
64 + O_CREAT
65 + Create the file if it does not exist. This flag requires that
66 + the mode argument be specified.
57 67
68 + If the file exists, this flag has no effect except as noted under
69 + O_EXCL below. Otherwise, the file is created with the user ID of
70 + the file set to the effective user ID of the process. The group
71 + ID of the file is set to the effective group IDs of the process,
72 + or if the S_ISGID bit is set in the directory in which the file
73 + is being created, the file's group ID is set to the group ID of
74 + its parent directory. If the group ID of the new file does not
75 + match the effective group ID or one of the supplementary groups
76 + IDs, the S_ISGID bit is cleared.
58 77
59 - O_WRONLY
60 - Open for writing only.
78 + The access permission bits (see stat.h(3HEAD)) of the file mode
79 + are set to the value of mode, modified as follows (see creat(2)):
80 + a bitwise-AND is performed on the file-mode bits and the
81 + corresponding bits in the complement of the process's file mode
82 + creation mask. Thus, all bits set in the process's file mode
83 + creation mask (see umask(2)) are correspondingly cleared in the
84 + file's permission mask. The "save text image after execution
85 + bit" of the mode is cleared (see chmod(2)). When bits other than
86 + the file permission bits are set, the effect is unspecified. The
87 + mode argument does not affect whether the file is open for
88 + reading, writing or for both.
61 89
90 + O_DIRECT
91 + Indicates that the file data is not going to be reused in the
92 + near future. When possible, data is read or written directly
93 + between the application's memory and the device when the data is
94 + accessed with read(2) and write(2) operations. See directio(3C)
95 + for more details.
62 96
63 - O_RDWR
64 - Open for reading and writing. The result is undefined if
65 - this flag is applied to a FIFO.
97 + O_DIRECTORY
98 + Indicates that attempts to open path should fail unless path is a
99 + directory. If both O_CREAT and O_DIRECTORY are specified then
100 + the call will fail if it would result in a file being created.
101 + If a directory already exists at path then it will behave as if
102 + the O_DIRECTORY flag had not been present. If the O_EXCL and
103 + O_CREAT flags are specified, then the call will always fail as
104 + they imply a file should always be created.
66 105
106 + O_DSYNC
107 + Write I/O operations on the file descriptor complete as defined
108 + by synchronized I/O data integrity completion.
67 109
110 + O_EXCL If O_CREAT and O_EXCL are set, open() fails if the file exists.
111 + The check for the existence of the file and the creation of the
112 + file if it does not exist is atomic with respect to other threads
113 + executing open() naming the same filename in the same directory
114 + with O_EXCL and O_CREAT set. If O_EXCL and O_CREAT are set, and
115 + path names a symbolic link, open() fails and sets errno to
116 + EEXIST, regardless of the contents of the symbolic link. If
117 + O_EXCL is set and O_CREAT is not set, the result is undefined.
68 118
69 - Any combination of the following may be used:
119 + O_EXEC If set, indicates that the file should be opened for execute
120 + permission. This option is only valid for regular files; an
121 + error will be returned if the target is not a regular file.
70 122
71 - O_APPEND
123 + O_LARGEFILE
124 + If set, the offset maximum in the open file description is the
125 + largest value that can be represented correctly in an object of
126 + type off64_t.
72 127
73 - If set, the file offset is set to the end of the file prior to each
74 - write.
128 + O_NOCTTY
129 + If set and path identifies a terminal device, open() does not
130 + cause the terminal device to become the controlling terminal for
131 + the process.
75 132
133 + O_NOFOLLOW
134 + If the path names a symbolic link, open() fails and sets errno to
135 + ELOOP.
76 136
77 - O_CREAT
137 + O_NOLINKS
138 + If the link count of the named file is greater than 1, open()
139 + fails and sets errno to EMLINK.
78 140
79 - Create the file if it does not exist. This flag requires that the
80 - mode argument be specified.
141 + O_CLOEXEC
142 + If set, the file descriptor returned will be closed prior to any
143 + future exec(2) calls.
81 144
82 - If the file exists, this flag has no effect except as noted under
83 - O_EXCL below. Otherwise, the file is created with the user ID of
84 - the file set to the effective user ID of the process. The group ID
85 - of the file is set to the effective group IDs of the process, or if
86 - the S_ISGID bit is set in the directory in which the file is being
87 - created, the file's group ID is set to the group ID of its parent
88 - directory. If the group ID of the new file does not match the
89 - effective group ID or one of the supplementary groups IDs, the
90 - S_ISGID bit is cleared. The access permission bits (see
91 - <sys/stat.h>) of the file mode are set to the value of mode,
92 - modified as follows (see creat(2)): a bitwise-AND is performed on
93 - the file-mode bits and the corresponding bits in the complement of
94 - the process's file mode creation mask. Thus, all bits set in the
95 - process's file mode creation mask (see umask(2)) are
96 - correspondingly cleared in the file's permission mask. The "save
97 - text image after execution bit" of the mode is cleared (see
98 - chmod(2)). When bits other than the file permission bits are set,
99 - the effect is unspecified. The mode argument does not affect
100 - whether the file is open for reading, writing or for both.
145 + O_NONBLOCK O_NDELAY
146 + These flags can affect subsequent reads and writes (see read(2)
147 + and write(2)). If both O_NDELAY and O_NONBLOCK are set,
148 + O_NONBLOCK takes precedence.
101 149
150 + When opening a FIFO with O_RDONLY or O_WRONLY set:
102 151
103 - O_DIRECT
152 + o If O_NONBLOCK or O_NDELAY is set, an open() for reading only
153 + returns without delay. An open() for writing only returns an
154 + error if no process currently has the file open for reading.
104 155
105 - Indicates that the file data is not going to be reused in the near
106 - future. When possible, data is read or written directly between
107 - the application's memory and the device when the data is accessed
108 - with read(2) and write(2) operations. See directio(3C) for more
109 - details.
156 + o If O_NONBLOCK and O_NDELAY are clear, an open() for reading
157 + only blocks until a thread opens the file for writing. An
158 + open() for writing only blocks the calling thread until a
159 + thread opens the file for reading.
110 160
161 + After both ends of a FIFO have been opened once, there is no
162 + guarantee that further calls to open() O_RDONLY (O_WRONLY) will
163 + synchronize with later calls to open() O_WRONLY (O_RDONLY) until
164 + both ends of the FIFO have been closed by all readers and
165 + writers. Any data written into a FIFO will be lost if both ends
166 + of the FIFO are closed before the data is read.
111 167
112 - O_DIRECTORY
168 + When opening a block special or character special file that
169 + supports non-blocking opens:
113 170
114 - Indicates that attempts to open path should fail unless path is a
115 - directory. If both O_CREAT and O_DIRECTORY are specified then the
116 - call will fail if it would result in a file being created. If a
117 - directory already exists at path then it will behave as if the
118 - O_DIRECTORY flag had not been present. If the O_EXCL and O_CREAT
119 - flags are specified, then the call will always fail as they imply a
120 - file should always be created.
171 + o If O_NONBLOCK or O_NDELAY is set, the open() function returns
172 + without blocking for the device to be ready or available.
173 + Subsequent behavior of the device is device-specific.
121 174
175 + o If O_NONBLOCK and O_NDELAY are clear, the open() function
176 + blocks the calling thread until the device is ready or
177 + available before returning.
122 178
123 - O_DSYNC
179 + Otherwise, the behavior of O_NONBLOCK and O_NDELAY is
180 + unspecified.
124 181
125 - Write I/O operations on the file descriptor complete as defined by
126 - synchronized I/O data integrity completion.
182 + O_RSYNC
183 + Read I/O operations on the file descriptor complete at the same
184 + level of integrity as specified by the O_DSYNC and O_SYNC flags.
185 + If both O_DSYNC and O_RSYNC are set in oflag, all I/O operations
186 + on the file descriptor complete as defined by synchronized I/O
187 + data integrity completion. If both O_SYNC and O_RSYNC are set in
188 + oflag, all I/O operations on the file descriptor complete as
189 + defined by synchronized I/O file integrity completion.
127 190
191 + O_SEARCH
192 + If set, indicates that the directory should be opened for
193 + searching. This option is only valid for a directory; an error
194 + will be returned if the target is not a directory.
128 195
129 - O_EXCL
196 + O_SYNC Write I/O operations on the file descriptor complete as defined
197 + by synchronized I/O file integrity completion (see
198 + fcntl.h(3HEAD)) definition of O_SYNC.
130 199
131 - If O_CREAT and O_EXCL are set, open() fails if the file exists. The
132 - check for the existence of the file and the creation of the file if
133 - it does not exist is atomic with respect to other threads executing
134 - open() naming the same filename in the same directory with O_EXCL
135 - and O_CREAT set. If O_EXCL and O_CREAT are set, and path names a
136 - symbolic link, open() fails and sets errno to EEXIST, regardless of
137 - the contents of the symbolic link. If O_EXCL is set and O_CREAT is
138 - not set, the result is undefined.
200 + O_TRUNC
201 + If the file exists and is a regular file, and the file is
202 + successfully opened O_RDWR or O_WRONLY, its length is truncated
203 + to 0 and the mode and owner are unchanged. It has no effect on
204 + FIFO special files or terminal device files. Its effect on other
205 + file types is implementation-dependent. The result of using
206 + O_TRUNC with O_RDONLY is undefined.
139 207
208 + O_XATTR
209 + If set in openat(), a relative path argument is interpreted as a
210 + reference to an extended attribute of the file associated with
211 + the supplied file descriptor. This flag therefore requires the
212 + presence of a legal fildes argument. If set in open(), the
213 + implied file descriptor is that for the current working
214 + directory. Extended attributes must be referenced with a
215 + relative path; providing an absolute path results in a normal
216 + file reference.
140 217
141 - O_EXEC
218 + If O_CREAT is set and the file did not previously exist, upon successful
219 + completion, open() marks for update the st_atime, st_ctime, and st_mtime
220 + fields of the file and the st_ctime and st_mtime fields of the parent
221 + directory.
142 222
143 - If set, indicates that the file should be opened for execute
144 - permission. This option is only valid for regular files, an error
145 - will be returned if it is not.
223 + If O_TRUNC is set and the file did previously exist, upon successful
224 + completion, open() marks for update the st_ctime and st_mtime fields of
225 + the file.
146 226
227 + If both the O_SYNC and O_DSYNC flags are set, the effect is as if only
228 + the O_SYNC flag was set.
147 229
148 - O_LARGEFILE
230 + If path refers to a STREAMS file, oflag may be constructed from
231 + O_NONBLOCK or O_NODELAY OR-ed with either O_RDONLY, O_WRONLY, or O_RDWR.
232 + Other flag values are not applicable to STREAMS devices and have no
233 + effect on them. The values O_NONBLOCK and O_NODELAY affect the operation
234 + of STREAMS drivers and certain functions (see read(2), getmsg(2),
235 + putmsg(2), and write(2)) applied to file descriptors associated with
236 + STREAMS files. For STREAMS drivers, the implementation of O_NONBLOCK and
237 + O_NODELAY is device-specific.
149 238
150 - If set, the offset maximum in the open file description is the
151 - largest value that can be represented correctly in an object of
152 - type off64_t.
239 + When open() is invoked to open a named stream, and the connld(7M) module
240 + has been pushed on the pipe, open() blocks until the server process has
241 + issued an I_RECVFD ioctl(2) (see streamio(7I)) to receive the file
242 + descriptor.
153 243
244 + If path names the manager side of a pseudo-terminal device, then it is
245 + unspecified whether open() locks the subsidiary side so that it cannot be
246 + opened. Portable applications must call unlockpt(3C) before opening the
247 + subsidiary side.
154 248
155 - O_NOCTTY
249 + If the file is a regular file and the local file system is mounted with
250 + the nbmand mount option, then a mandatory share reservation is
251 + automatically obtained on the file. The share reservation is obtained as
252 + if fcntl(2) were called with cmd F_SHARE_NBMAND and the fshare_t values
253 + set as follows:
156 254
157 - If set and path identifies a terminal device, open() does not cause
158 - the terminal device to become the controlling terminal for the
159 - process.
160 -
161 -
162 - O_NOFOLLOW
163 -
164 - If the path names a symbolic link, open() fails and sets errno to
165 - ELOOP.
166 -
167 -
168 - O_NOLINKS
169 -
170 - If the link count of the named file is greater than 1, open() fails
171 - and sets errno to EMLINK.
172 -
173 -
174 - O_CLOEXEC
175 -
176 - If set, the file descriptor returned will be closed prior to any
177 - future exec() calls.
178 -
179 -
180 - O_NONBLOCK or O_NDELAY
181 -
182 - These flags can affect subsequent reads and writes (see read(2) and
183 - write(2)). If both O_NDELAY and O_NONBLOCK are set, O_NONBLOCK
184 - takes precedence.
185 -
186 - When opening a FIFO with O_RDONLY or O_WRONLY set:
187 -
188 - o If O_NONBLOCK or O_NDELAY is set, an open() for reading
189 - only returns without delay. An open() for writing only
190 - returns an error if no process currently has the file
191 - open for reading.
192 -
193 - o If O_NONBLOCK and O_NDELAY are clear, an open() for
194 - reading only blocks until a thread opens the file for
195 - writing. An open() for writing only blocks the calling
196 - thread until a thread opens the file for reading.
197 - After both ends of a FIFO have been opened, there is no guarantee
198 - that further calls to open() O_RDONLY (O_WRONLY) will synchronize
199 - with later calls to open() O_WRONLY (O_RDONLY) until both ends of
200 - the FIFO have been closed by all readers and writers. Any data
201 - written into a FIFO will be lost if both ends of the FIFO are
202 - closed before the data is read.
203 -
204 - When opening a block special or character special file that
205 - supports non-blocking opens:
206 -
207 - o If O_NONBLOCK or O_NDELAY is set, the open() function
208 - returns without blocking for the device to be ready or
209 - available. Subsequent behavior of the device is device-
210 - specific.
211 -
212 - o If O_NONBLOCK and O_NDELAY are clear, the open()
213 - function blocks the calling thread until the device is
214 - ready or available before returning.
215 - Otherwise, the behavior of O_NONBLOCK and O_NDELAY is unspecified.
216 -
217 -
218 - O_RSYNC
219 -
220 - Read I/O operations on the file descriptor complete at the same
221 - level of integrity as specified by the O_DSYNC and O_SYNC flags. If
222 - both O_DSYNC and O_RSYNC are set in oflag, all I/O operations on
223 - the file descriptor complete as defined by synchronized I/O data
224 - integrity completion. If both O_SYNC and O_RSYNC are set in oflag,
225 - all I/O operations on the file descriptor complete as defined by
226 - synchronized I/O file integrity completion.
227 -
228 -
229 - O_SEARCH
230 -
231 - If set, indicates that the directory should be opened for
232 - searching. This option is only valid for a directory, an error
233 - will be returned if it is not.
234 -
235 -
236 - O_SYNC
237 -
238 - Write I/O operations on the file descriptor complete as defined by
239 - synchronized I/O file integrity completion (see fcntl.h(3HEAD)
240 - definition of O_SYNC).
241 -
242 -
243 - O_TRUNC
244 -
245 - If the file exists and is a regular file, and the file is
246 - successfully opened O_RDWR or O_WRONLY, its length is truncated to
247 - 0 and the mode and owner are unchanged. It has no effect on FIFO
248 - special files or terminal device files. Its effect on other file
249 - types is implementation-dependent. The result of using O_TRUNC with
250 - O_RDONLY is undefined.
251 -
252 -
253 - O_XATTR
254 -
255 - If set in openat(), a relative path argument is interpreted as a
256 - reference to an extended attribute of the file associated with the
257 - supplied file descriptor. This flag therefore requires the
258 - presence of a legal fildes argument. If set in open(), the implied
259 - file descriptor is that for the current working directory. Extended
260 - attributes must be referenced with a relative path; providing an
261 - absolute path results in a normal file reference.
262 -
263 -
264 -
265 - If O_CREAT is set and the file did not previously exist, upon
266 - successful completion, open() marks for update the st_atime, st_ctime,
267 - and st_mtime fields of the file and the st_ctime and st_mtime fields of
268 - the parent directory.
269 -
270 -
271 - If O_TRUNC is set and the file did previously exist, upon successful
272 - completion, open() marks for update the st_ctime and st_mtime fields of
273 - the file.
274 -
275 -
276 - If both the O_SYNC and O_DSYNC flags are set, the effect is as if only
277 - the O_SYNC flag was set.
278 -
279 -
280 - If path refers to a STREAMS file, oflag may be constructed from
281 - O_NONBLOCK or O_NODELAY OR-ed with either O_RDONLY, O_WRONLY, or
282 - O_RDWR. Other flag values are not applicable to STREAMS devices and
283 - have no effect on them. The values O_NONBLOCK and O_NODELAY affect the
284 - operation of STREAMS drivers and certain functions (see read(2),
285 - getmsg(2), putmsg(2), and write(2)) applied to file descriptors
286 - associated with STREAMS files. For STREAMS drivers, the implementation
287 - of O_NONBLOCK and O_NODELAY is device-specific.
288 -
289 -
290 - When open() is invoked to open a named stream, and the connld module
291 - (see connld(7M)) has been pushed on the pipe, open() blocks until the
292 - server process has issued an I_RECVFD ioctl() (see streamio(7I)) to
293 - receive the file descriptor.
294 -
295 -
296 - If path names the master side of a pseudo-terminal device, then it is
297 - unspecified whether open() locks the slave side so that it cannot be
298 - opened. Portable applications must call unlockpt(3C) before opening
299 - the slave side.
300 -
301 -
302 - If the file is a regular file and the local file system is mounted with
303 - the nbmand mount option, then a mandatory share reservation is
304 - automatically obtained on the file. The share reservation is obtained
305 - as if fcntl(2) were called with cmd F_SHARE_NBMAND and the fshare_t
306 - values set as follows:
307 -
308 - f_access
255 + f_access
309 256 Set to the type of read/write access for which the file is
310 257 opened.
311 258
259 + f_deny F_NODNY
312 260
313 - f_deny
314 - F_NODNY
261 + f_id The file descriptor value returned from open().
315 262
263 + If path is a symbolic link and O_CREAT and O_EXCL are set, the link is
264 + not followed.
316 265
317 - f_id
318 - The file descriptor value returned from open().
266 + Certain flag values can be set following open() as described in fcntl(2).
319 267
268 + The largest value that can be represented correctly in an object of type
269 + off_t is established as the offset maximum in the open file description.
320 270
321 -
322 - If path is a symbolic link and O_CREAT and O_EXCL are set, the link is
323 - not followed.
324 -
325 -
326 - Certain flag values can be set following open() as described in
327 - fcntl(2).
328 -
329 -
330 - The largest value that can be represented correctly in an object of
331 - type off_t is established as the offset maximum in the open file
332 - description.
333 -
334 271 RETURN VALUES
335 - Upon successful completion, both open() and openat() functions open the
336 - file and return a non-negative integer representing the lowest numbered
337 - unused file descriptor. Otherwise, -1 is returned, errno is set to
338 - indicate the error, and no files are created or modified.
272 + The open() and openat() functions open the file and, if successful,
273 + return a non-negative integer representing the lowest numbered unused
274 + file descriptor; otherwise the value -1 is returned and the global
275 + variable errno is set to indicate the error and no files are created or
276 + modified.
339 277
340 -ERRORS
341 - The open() and openat() functions will fail if:
278 +EXAMPLES
279 + Example 1 Open a file for writing by the owner.
342 280
343 - EACCES
344 - Search permission is denied on a component of the path
345 - prefix.
281 + The following example opens the file /tmp/file, either by creating it if
282 + it does not already exist, or by truncating its length to 0 if it does
283 + exist. If the call creates a new file, the access permission bits in the
284 + file mode of the file are set to permit reading and writing by the owner,
285 + and to permit reading only by group members and others.
346 286
347 - The file exists and the permissions specified by oflag
348 - are denied.
287 + If the call to open() is successful, the file is opened for writing.
349 288
350 - The file does not exist and write permission is denied
351 - for the parent directory of the file to be created.
289 + #include <fcntl.h>
290 + ...
291 + int fd;
292 + mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
293 + char *filename = "/tmp/file";
294 + ...
295 + fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, mode);
296 + ...
352 297
353 - O_TRUNC is specified and write permission is denied.
298 + Example 2 Open a file using an existence check.
354 299
355 - The {PRIV_FILE_DAC_SEARCH} privilege allows processes
356 - to search directories regardless of permission bits.
357 - The {PRIV_FILE_DAC_WRITE} privilege allows processes to
358 - open files for writing regardless of permission bits.
359 - See privileges(5) for special considerations when
360 - opening files owned by UID 0 for writing. The
361 - {PRIV_FILE_DAC_READ} privilege allows processes to open
362 - files for reading regardless of permission bits.
300 + The following example uses the open() function to try to create the
301 + LOCKFILE file and open it for writing. Since the open() function
302 + specifies the O_EXCL flag, the call fails if the file already exists. In
303 + that case, the application assumes that someone else is updating the
304 + password file and exits.
363 305
306 + #include <fcntl.h>
307 + #include <stdio.h>
308 + #include <stdlib.h>
309 + #include <err.h>
310 + ...
311 + #define LOCKFILE "/etc/ptmp"
312 + ...
313 + int pfd; /* Integer for file descriptor returned by open() call. */
314 + ...
315 + if ((pfd = open(LOCKFILE, O_WRONLY | O_CREAT | O_EXCL,
316 + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < 0) {
317 + err(1, "Cannot open %s. Try again later.", LOCKFILE);
318 + }
319 + ...
364 320
365 - EAGAIN
366 - A mandatory share reservation could not be obtained
367 - because the desired access conflicts with an existing
368 - f_deny share reservation.
321 + Example 3 Open a file for writing.
369 322
323 + The following example opens a file for writing, creating the file if it
324 + does not already exist. If the file does exist, the system truncates the
325 + file to zero bytes.
370 326
371 - EDQUOT
372 - The file does not exist, O_CREAT is specified, and
373 - either the directory where the new file entry is being
374 - placed cannot be extended because the user's quota of
375 - disk blocks on that file system has been exhausted, or
376 - the user's quota of inodes on the file system where the
377 - file is being created has been exhausted.
327 + #include <fcntl.h>
328 + #include <stdio.h>
329 + #include <stdlib.h>
330 + #include <err.h>
331 + ...
332 + int pfd;
333 + char filename[PATH_MAX+1];
334 + ...
335 + if ((pfd = open(filename, O_WRONLY | O_CREAT | O_TRUNC,
336 + S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) < 0) {
337 + err(1, "Cannot open output file");
338 + }
339 + ...
378 340
341 +ERRORS
342 + The open() and openat() functions will fail if:
379 343
380 - EEXIST
381 - The O_CREAT and O_EXCL flags are set and the named file
382 - exists.
344 + EACCES Search permission is denied on a component of the path
345 + prefix.
383 346
347 + The file exists and the permissions specified by oflag
348 + are denied.
384 349
385 - EILSEQ
386 - The path argument includes non-UTF8 characters and the
387 - file system accepts only file names where all
388 - characters are part of the UTF-8 character codeset.
350 + The file does not exist and write permission is denied
351 + for the parent directory of the file to be created.
389 352
353 + O_TRUNC is specified and write permission is denied.
390 354
391 - EINTR
392 - A signal was caught during open().
355 + The {PRIV_FILE_DAC_SEARCH} privilege allows processes
356 + to search directories regardless of permission bits.
357 + The {PRIV_FILE_DAC_WRITE} privilege allows processes
358 + to open files for writing regardless of permission
359 + bits. See privileges(5) for special considerations
360 + when opening files owned by user ID 0 for writing.
361 + The {PRIV_FILE_DAC_READ} privilege allows processes to
362 + open files for reading regardless of permission bits.
393 363
364 + EAGAIN A mandatory share reservation could not be obtained
365 + because the desired access conflicts with an existing
366 + f_deny share reservation (see fcntl(2)).
394 367
395 - EFAULT
396 - The path argument points to an illegal address.
368 + EDQUOT The file does not exist, O_CREAT is specified, and
369 + either the directory where the new file entry is being
370 + placed cannot be extended because the user's quota of
371 + disk blocks on that file system has been exhausted, or
372 + the user's quota of inodes on the file system where
373 + the file is being created has been exhausted.
397 374
375 + EEXIST The O_CREAT and O_EXCL flags are set and the named
376 + file already exists.
398 377
399 - EINVAL
400 - The system does not support synchronized or direct I/O
401 - for this file, or the O_XATTR flag was supplied and the
402 - underlying file system does not support extended file
403 - attributes.
378 + EILSEQ The path argument includes bytes that are not valid
379 + UTF-8 characters, and the file system accepts only
380 + file names where all characters are part of the UTF-8
381 + character codeset.
404 382
383 + EINTR A signal was caught during open().
405 384
406 - EIO
407 - The path argument names a STREAMS file and a hangup or
408 - error occurred during the open().
385 + EFAULT The path argument points to an illegal address.
409 386
387 + EINVAL Either the system does not support synchronized or
388 + direct I/O for this file, or the O_XATTR flag was
389 + supplied and the underlying file system does not
390 + support extended file attributes.
410 391
411 - EISDIR
412 - The named file is a directory and oflag includes
413 - O_WRONLY or O_RDWR.
392 + EIO The path argument names a STREAMS file and a hangup or
393 + error occurred during the open().
414 394
395 + EISDIR The named file is a directory and oflag includes
396 + O_WRONLY or O_RDWR.
415 397
416 - ELOOP
417 - Too many symbolic links were encountered in resolving
418 - path.
398 + ELOOP Too many symbolic links were encountered in resolving
399 + path.
419 400
420 - A loop exists in symbolic links encountered during
421 - resolution of the path argument.
401 + A loop exists in symbolic links encountered during
402 + resolution of the path argument.
422 403
423 - The O_NOFOLLOW flag is set and the final component of
424 - path is a symbolic link.
404 + The O_NOFOLLOW flag is set and the final component of
405 + path is a symbolic link.
425 406
407 + EMFILE There are currently {OPEN_MAX} file descriptors open
408 + in the calling process.
426 409
427 - EMFILE
428 - There are currently {OPEN_MAX} file descriptors open in
429 - the calling process.
410 + EMLINK The O_NOLINKS flag is set and the named file has a
411 + link count greater than 1.
430 412
413 + EMULTIHOP Components of path require hopping to multiple remote
414 + machines and the file system does not allow it.
431 415
432 - EMLINK
433 - The O_NOLINKS flag is set and the named file has a link
434 - count greater than 1.
416 + ENAMETOOLONG The length of the path argument exceeds {PATH_MAX} or
417 + a pathname component is longer than {NAME_MAX}.
435 418
419 + ENFILE The maximum allowable number of files is currently
420 + open in the system.
436 421
437 - EMULTIHOP
438 - Components of path require hopping to multiple remote
439 - machines and the file system does not allow it.
422 + ENOENT The O_CREAT flag is not set and the named file does
423 + not exist; or the O_CREAT flag is set and either the
424 + path prefix does not exist or the path argument points
425 + to an empty string.
440 426
427 + The O_CREAT and O_DIRECTORY flags were both set and
428 + path did not point to a file.
441 429
442 - ENAMETOOLONG
443 - The length of the path argument exceeds {PATH_MAX} or a
444 - pathname component is longer than {NAME_MAX}.
430 + ENOEXEC The O_EXEC flag is set and path does not point to a
431 + regular file.
445 432
433 + ENOLINK The path argument points to a remote machine, and the
434 + link to that machine is no longer active.
446 435
447 - ENFILE
448 - The maximum allowable number of files is currently open
449 - in the system.
436 + ENOSR Th path argument names a STREAMS-based file and the
437 + system is unable to allocate a STREAM.
450 438
439 + ENOSPC The directory or file system that would contain the
440 + new file cannot be expanded, the file does not exist,
441 + and O_CREAT is specified.
451 442
452 - ENOENT
453 - The O_CREAT flag is not set and the named file does not
454 - exist; or the O_CREAT flag is set and either the path
455 - prefix does not exist or the path argument points to an
456 - empty string.
443 + ENOSYS The device specified by path does not support the open
444 + operation.
457 445
458 - The O_CREAT and O_DIRECTORY flags were both set and
459 - path did not point to a file.
446 + ENOTDIR A component of the path prefix is not a directory or a
447 + relative path was supplied to openat(), the O_XATTR
448 + flag was not supplied, and the file descriptor does
449 + not refer to a directory. The O_SEARCH flag was
450 + passed and path does not refer to a directory.
460 451
452 + The O_DIRECTORY flag was set and the file was not a
453 + directory.
461 454
462 - ENOEXEC
463 - The O_EXEC flag is set and path does not point to a
464 - regular file.
455 + ENXIO The O_NONBLOCK flag is set, the named file is a FIFO,
456 + the O_WRONLY flag is set, and no process has the file
457 + open for reading; or the named file is a character
458 + special or block special file and the device
459 + associated with this special file does not exist or
460 + has been retired by the fault management framework.
465 461
462 + EOPNOTSUPP An attempt was made to open a path that corresponds to
463 + an AF_UNIX socket.
466 464
467 - ENOLINK
468 - The path argument points to a remote machine, and the
469 - link to that machine is no longer active.
465 + EOVERFLOW The named file is a regular file and either
466 + O_LARGEFILE is not set and the size of the file cannot
467 + be represented correctly in an object of type off_t or
468 + O_LARGEFILE is set and the size of the file cannot be
469 + represented correctly in an object of type off64_t.
470 470
471 + EROFS The named file resides on a read-only file system and
472 + either O_WRONLY, O_RDWR, O_CREAT (if file does not
473 + exist), or O_TRUNC is set in the oflag argument.
471 474
472 - ENOSR
473 - The path argument names a STREAMS-based file and the
474 - system is unable to allocate a STREAM.
475 + The openat() function will fail if:
475 476
477 + EBADF The fildes argument is not a valid open file
478 + descriptor or is not AT_FTCWD.
476 479
477 - ENOSPC
478 - The directory or file system that would contain the new
479 - file cannot be expanded, the file does not exist, and
480 - O_CREAT is specified.
480 + The open() function may fail if:
481 481
482 + EAGAIN The path argument names the subsidiary side of a
483 + pseudo-terminal device that is locked.
482 484
483 - ENOSYS
484 - The device specified by path does not support the open
485 - operation.
485 + EINVAL The value of the oflag argument is not valid.
486 486
487 + ENAMETOOLONG Pathname resolution of a symbolic link produced an
488 + intermediate result whose length exceeds {PATH_MAX}.
487 489
488 - ENOTDIR
489 - A component of the path prefix is not a directory or a
490 - relative path was supplied to openat(), the O_XATTR
491 - flag was not supplied, and the file descriptor does not
492 - refer to a directory. The O_SEARCH flag was passed and
493 - path does not refer to a directory.
490 + ENOMEM The path argument names a STREAMS file and the system
491 + is unable to allocate resources.
494 492
495 - The O_DIRECTORY flag was set and the file was not a
496 - directory.
493 + ETXTBSY The file is a pure procedure (shared text) file that
494 + is being executed and oflag is O_WRONLY or O_RDWR.
497 495
498 -
499 - ENXIO
500 - The O_NONBLOCK flag is set, the named file is a FIFO,
501 - the O_WRONLY flag is set, and no process has the file
502 - open for reading; or the named file is a character
503 - special or block special file and the device associated
504 - with this special file does not exist or has been
505 - retired by the fault management framework .
506 -
507 -
508 - EOPNOTSUPP
509 - An attempt was made to open a path that corresponds to
510 - a AF_UNIX socket.
511 -
512 -
513 - EOVERFLOW
514 - The named file is a regular file and either O_LARGEFILE
515 - is not set and the size of the file cannot be
516 - represented correctly in an object of type off_t or
517 - O_LARGEFILE is set and the size of the file cannot be
518 - represented correctly in an object of type off64_t.
519 -
520 -
521 - EROFS
522 - The named file resides on a read-only file system and
523 - either O_WRONLY, O_RDWR, O_CREAT (if file does not
524 - exist), or O_TRUNC is set in the oflag argument.
525 -
526 -
527 -
528 - The openat() function will fail if:
529 -
530 - EBADF
531 - The fildes argument is not a valid open file descriptor or is
532 - not AT_FTCWD.
533 -
534 -
535 -
536 - The open() function may fail if:
537 -
538 - EAGAIN
539 - The path argument names the slave side of a pseudo-
540 - terminal device that is locked.
541 -
542 -
543 - EINVAL
544 - The value of the oflag argument is not valid.
545 -
546 -
547 - ENAMETOOLONG
548 - Pathname resolution of a symbolic link produced an
549 - intermediate result whose length exceeds {PATH_MAX}.
550 -
551 -
552 - ENOMEM
553 - The path argument names a STREAMS file and the system
554 - is unable to allocate resources.
555 -
556 -
557 - ETXTBSY
558 - The file is a pure procedure (shared text) file that is
559 - being executed and oflag is O_WRONLY or O_RDWR.
560 -
561 -
562 -EXAMPLES
563 - Example 1 Open a file for writing by the owner.
564 -
565 -
566 - The following example opens the file /tmp/file, either by creating it
567 - if it does not already exist, or by truncating its length to 0 if it
568 - does exist. If the call creates a new file, the access permission bits
569 - in the file mode of the file are set to permit reading and writing by
570 - the owner, and to permit reading only by group members and others.
571 -
572 -
573 -
574 - If the call to open() is successful, the file is opened for writing.
575 -
576 -
577 - #include <fcntl.h>
578 - ...
579 - int fd;
580 - mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
581 - char *filename = "/tmp/file";
582 - ...
583 - fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, mode);
584 - ...
585 -
586 -
587 - Example 2 Open a file using an existence check.
588 -
589 -
590 - The following example uses the open() function to try to create the
591 - LOCKFILE file and open it for writing. Since the open() function
592 - specifies the O_EXCL flag, the call fails if the file already exists.
593 - In that case, the application assumes that someone else is updating the
594 - password file and exits.
595 -
596 -
597 - #include <fcntl.h>
598 - #include <stdio.h>
599 - #include <stdlib.h>
600 - #define LOCKFILE "/etc/ptmp"
601 - ...
602 - int pfd; /* Integer for file descriptor returned by open() call. */
603 - ...
604 - if ((pfd = open(LOCKFILE, O_WRONLY | O_CREAT | O_EXCL,
605 - S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) == -1)
606 - {
607 - fprintf(stderr, "Cannot open /etc/ptmp. Try again later.\n");
608 - exit(1);
609 - }
610 - ...
611 -
612 -
613 - Example 3 Open a file for writing.
614 -
615 -
616 - The following example opens a file for writing, creating the file if it
617 - does not already exist. If the file does exist, the system truncates
618 - the file to zero bytes.
619 -
620 -
621 - #include <fcntl.h>
622 - #include <stdio.h>
623 - #include <stdlib.h>
624 - #define LOCKFILE "/etc/ptmp"
625 - ...
626 - int pfd;
627 - char filename[PATH_MAX+1];
628 - ...
629 - if ((pfd = open(filename, O_WRONLY | O_CREAT | O_TRUNC,
630 - S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)) == -1)
631 - {
632 - perror("Cannot open output file\n"); exit(1);
633 - }
634 - ...
635 -
636 -
637 496 USAGE
638 - The open() function has a transitional interface for 64-bit file
639 - offsets. See lf64(5). Note that using open64() is equivalent to using
640 - open() with O_LARGEFILE set in oflag.
497 + The open() function has a transitional interface for 64-bit file offsets.
498 + See lf64(5). Note that using open64() is equivalent to using open(with)
499 + O_LARGEFILE set in oflag.
641 500
642 -ATTRIBUTES
643 - See attributes(5) for descriptions of the following attributes:
501 +INTERFACE STABILITY
502 + Committed
644 503
504 +MT LEVEL
505 + Async-Signal-Safe
645 506
646 -
647 -
648 - +--------------------+-------------------------------+
649 - | ATTRIBUTE TYPE | ATTRIBUTE VALUE |
650 - +--------------------+-------------------------------+
651 - |Interface Stability | Committed |
652 - +--------------------+-------------------------------+
653 - |MT-Level | Async-Signal-Safe |
654 - +--------------------+-------------------------------+
655 - |Standard | For open(), see standards(5). |
656 - +--------------------+-------------------------------+
657 -
658 507 SEE ALSO
659 - Intro(2), chmod(2), close(2), creat(2), dup(2), exec(2), fcntl(2),
660 - getmsg(2), getrlimit(2), lseek(2), putmsg(2), read(2), stat(2),
661 - umask(2), write(2), attropen(3C), directio(3C), fcntl.h(3HEAD),
662 - stat.h(3HEAD), unlockpt(3C), attributes(5), lf64(5), privileges(5),
663 - standards(5), connld(7M), streamio(7I)
508 + chmod(2), close(2), creat(2), dup(2), exec(2), fcntl(2), getmsg(2),
509 + getrlimit(2), Intro(2), lseek(2), putmsg(2), read(2), stat(2), umask(2),
510 + write(2), attropen(3C), directio(3C), unlockpt(3C), fcntl.h(3HEAD),
511 + stat.h(3HEAD), attributes(5), lf64(5), privileges(5), standards(5),
512 + streamio(7I), connld(7M)
664 513
665 514 NOTES
666 - Hierarchical Storage Management (HSM) file systems can sometimes cause
667 - long delays when opening a file, since HSM files must be recalled from
668 - secondary storage.
515 + Hierarchical Storage Management (HSM) file systems can sometimes cause
516 + long delays when opening a file, since HSM files must be recalled from
517 + secondary storage.
669 518
670 - March 10, 2020 OPEN(2)
519 +illumos February 5, 2022 illumos
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX