]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/open.2
Added pthreads.7 to SEE ALSO.
[thirdparty/man-pages.git] / man2 / open.2
CommitLineData
fea681da
MK
1.\" Hey Emacs! This file is -*- nroff -*- source.
2.\"
3.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
4.\" 1993 Michael Haardt, Ian Jackson.
5.\"
6.\" Permission is granted to make and distribute verbatim copies of this
7.\" manual provided the copyright notice and this permission notice are
8.\" preserved on all copies.
9.\"
10.\" Permission is granted to copy and distribute modified versions of this
11.\" manual under the conditions for verbatim copying, provided that the
12.\" entire resulting derived work is distributed under the terms of a
13.\" permission notice identical to this one.
14.\"
15.\" Since the Linux kernel and libraries are constantly changing, this
16.\" manual page may be incorrect or out-of-date. The author(s) assume no
17.\" responsibility for errors or omissions, or for damages resulting from
18.\" the use of the information contained herein. The author(s) may not
19.\" have taken the same level of care in the production of this manual,
20.\" which is licensed free of charge, as they might when working
21.\" professionally.
22.\"
23.\" Formatted or processed versions of this manual, if unaccompanied by
24.\" the source, must acknowledge the copyright and authors of this work.
25.\"
26.\" Modified 1993-07-21 by Rik Faith <faith@cs.unc.edu>
27.\" Modified 1994-08-21 by Michael Haardt
28.\" Modified 1996-04-13 by Andries Brouwer <aeb@cwi.nl>
29.\" Modified 1996-05-13 by Thomas Koenig
30.\" Modified 1996-12-20 by Michael Haardt
31.\" Modified 1999-02-19 by Andries Brouwer <aeb@cwi.nl>
32.\" Modified 1998-11-28 by Joseph S. Myers <jsm28@hermes.cam.ac.uk>
33.\" Modified 1999-06-03 by Michael Haardt
305a0578
MK
34.\" Modified 2002-05-07 by Michael Kerrisk <mtk-manpages@gmx.net>
35.\" Modified 2004-06-23 by Michael Kerrisk <mtk-manpages@gmx.net>
1c1e15ed
MK
36.\" 2004-12-08, mtk, reordered flags list alphabetically
37.\" 2004-12-08, Martin Pool <mbp@sourcefrog.net> (& mtk), added O_NOATIME
fea681da 38.\"
e366dbc4 39.TH OPEN 2 2005-06-22 "Linux 2.6.12" "Linux Programmer's Manual"
fea681da
MK
40.SH NAME
41open, creat \- open and possibly create a file or device
42.SH SYNOPSIS
43.nf
44.B #include <sys/types.h>
45.B #include <sys/stat.h>
46.B #include <fcntl.h>
47.sp
48.BI "int open(const char *" pathname ", int " flags );
49.BI "int open(const char *" pathname ", int " flags ", mode_t " mode );
50.BI "int creat(const char *" pathname ", mode_t " mode );
51.fi
52.SH DESCRIPTION
e366dbc4
MK
53Given a
54.IR pathname
55for a file,
1f6ceb40 56.BR open ()
e366dbc4
MK
57returns a file descriptor, a small, non-negative integer
58for use in subsequent system calls
59.RB ( read "(2), " write "(2), " lseek "(2), " fcntl "(2), etc.)."
60The file descriptor returned by a successful call will be
2c4bff36 61the lowest-numbered file descriptor not currently open for the process.
e366dbc4
MK
62.PP
63The new file descriptor is set to remain open across an
64.BR execve (2)
1f6ceb40
MK
65(i.e., the
66.B FD_CLOEXEC
67file descriptor flag described in
68.BR fcntl (2)
69is initially disabled).
70The file offset is set to the beginning of the file (see
71.BR lseek (2)).
e366dbc4
MK
72.PP
73A call to
74.BR open ()
75creates a new
76.IR "open file description" ,
77an entry in the system-wide table of open files.
e366dbc4
MK
78This entry records the file offset and the file status flags
79(modifiable via the
80.BR fcntl ()
81.B F_SETFL
82operation).
2c4bff36
MK
83A file descriptor is a reference to one of these entries;
84this reference is unaffected if
85.I pathname
86is subsequently removed or modified to refer to a different file.
e366dbc4 87The new open file description is initially not shared
2c4bff36
MK
88with any other process,
89but sharing may arise via
90.BR fork (2).
e366dbc4 91.PP
fea681da
MK
92The parameter
93.I flags
e366dbc4
MK
94must include one of the following
95.IR "access modes" :
96.BR O_RDONLY ", " O_WRONLY ", or " O_RDWR.
97These request opening the file read-only, write-only, or read/write,
98respectively.
99In addition, zero or more of the following may be
fea681da 100.RI bitwise- or 'd
e366dbc4
MK
101in
102.IR flags :
fea681da 103.TP
1c1e15ed
MK
104.B O_APPEND
105The file is opened in append mode. Before each
106.BR write (),
1e568304 107the file offset is positioned at the end of the file,
1c1e15ed
MK
108as if with
109.BR lseek ().
110.B O_APPEND
111may lead to corrupted files on NFS file systems if more than one process
112appends data to a file at once. This is because NFS does not support
113appending to a file, so the client kernel has to simulate it, which
114can't be done without a race condition.
115.TP
116.B O_ASYNC
117.\" FIXME -- as far as I can tell O_ASYNC doesn't work for open(2),
118.\" only when set via fcntl(2) -- MTK, Dec 04
119Generate a signal (SIGIO by default, but this can be changed via
120.BR fcntl (2))
121when input or output becomes possible on this file descriptor.
1f6ceb40
MK
122This feature is only available for terminals, pseudo-terminals,
123sockets, and (since Linux 2.6) pipes and FIFOs.
124See
1c1e15ed
MK
125.BR fcntl (2)
126for further details.
127.TP
fea681da
MK
128.B O_CREAT
129If the file does not exist it will be created.
130The owner (user ID) of the file is set to the effective user ID
131of the process. The group ownership (group ID) is set either to
132the effective group ID of the process or to the group ID of the
133parent directory (depending on filesystem type and mount options,
134and the mode of the parent directory, see, e.g., the mount options
135.I bsdgroups
136and
137.I sysvgroups
138of the ext2 filesystem, as described in
139.BR mount (8)).
140.TP
1c1e15ed
MK
141.B O_DIRECT
142Try to minimize cache effects of the I/O to and from this file.
143In general this will degrade performance, but it is useful in
144special situations, such as when applications do their own caching.
145File I/O is done directly to/from user space buffers.
e366dbc4 146The I/O is synchronous, i.e., at the completion of a
1c1e15ed
MK
147.BR read (2)
148or
e366dbc4
MK
149.BR write (2),
150data is guaranteed to have been transferred.
1c1e15ed
MK
151Under Linux 2.4 transfer sizes, and the alignment of user buffer
152and file offset must all be multiples of the logical block size
153of the file system. Under Linux 2.6 alignment to 512-byte boundaries
154suffices.
155.\" Alignment should satisfy requirements for the underlying device
156.\" There may be coherency problems.
157.br
158A semantically similar interface for block devices is described in
159.BR raw (8).
160.TP
161.B O_DIRECTORY
9f8d688a
MK
162If \fIpathname\fR is not a directory, cause the open to fail.
163.\" But see the following and its replies:
164.\" http://marc.theaimsgroup.com/?t=112748702800001&r=1&w=2
165.\" [PATCH] open: O_DIRECTORY and O_CREAT together should fail
166.\" O_DIRECTORY | O_CREAT causes O_DIRECTORY to be ignored.
167This flag is Linux-specific, and was added in kernel version 2.1.126, to
1c1e15ed
MK
168avoid denial-of-service problems if \fBopendir\fR(3) is called on a
169FIFO or tape device, but should not be used outside of the
170implementation of \fBopendir\fR.
171.TP
fea681da
MK
172.B O_EXCL
173When used with
174.BR O_CREAT ,
175if the file already exists it is an error and the
1c1e15ed 176.BR open ()
fea681da 177will fail. In this context, a symbolic link exists, regardless
1f6ceb40 178of where it points to.
fea681da 179.B O_EXCL
1f6ceb40 180is broken on NFS file systems; programs which rely on it for performing
fea681da 181locking tasks will contain a race condition. The solution for performing
1c1e15ed
MK
182atomic file locking using a lockfile is to create a unique file on
183the same file system (e.g., incorporating hostname and pid), use
fea681da 184.BR link (2)
63aa9df0 185to make a link to the lockfile. If \fBlink\fP() returns 0, the lock is
fea681da
MK
186successful. Otherwise, use
187.BR stat (2)
188on the unique file to check if its link count has increased to 2,
189in which case the lock is also successful.
190.TP
1c1e15ed
MK
191.B O_LARGEFILE
192(LFS)
193Allow files whose sizes cannot be represented in an
8478ee02 194.I off_t
1c1e15ed 195(but can be represented in an
8478ee02 196.IR off64_t )
1c1e15ed
MK
197to be opened.
198.TP
199.B O_NOATIME
200(Since Linux 2.6.8)
310b7919
MK
201Do not update the file last access time (st_atime in the inode)
202when the file is
1c1e15ed
MK
203.BR read (2).
204This flag is intended for use by indexing or backup programs,
205where its use can significantly reduce the amount of disk activity.
206This flag may not be effective on all filesystems.
207One example is NFS, where the server maintains the access time.
208.\" FIXME? This flag also affects the treatment of st_atime by mmap()
209.\" and readdir(2), MTK, Dec 04.
210.TP
fea681da
MK
211.B O_NOCTTY
212If
213.I pathname
214refers to a terminal device \(em see
215.BR tty (4)
216\(em it will not become the process's controlling terminal even if the
217process does not have one.
218.TP
1c1e15ed
MK
219.B O_NOFOLLOW
220If \fIpathname\fR is a symbolic link, then the open fails. This is a
221FreeBSD extension, which was added to Linux in version 2.1.126.
222Symbolic links in earlier components of the pathname will still be
e366dbc4
MK
223followed.
224.\" The headers from glibc 2.0.100 and later include a
225.\" definition of this flag; \fIkernels before 2.1.126 will ignore it if
226.\" used\fR.
fea681da
MK
227.TP
228.BR O_NONBLOCK " or " O_NDELAY
229When possible, the file is opened in non-blocking mode. Neither the
1c1e15ed 230.BR open ()
fea681da
MK
231nor any subsequent operations on the file descriptor which is
232returned will cause the calling process to wait.
233For the handling of FIFOs (named pipes), see also
234.BR fifo (4).
235This mode need not have any effect on files other than FIFOs.
236.TP
237.B O_SYNC
238The file is opened for synchronous I/O. Any
1c1e15ed 239.BR write ()s
fea681da
MK
240on the resulting file descriptor will block the calling process until
241the data has been physically written to the underlying hardware.
242.I See RESTRICTIONS below, though.
243.TP
1c1e15ed
MK
244.B O_TRUNC
245If the file already exists and is a regular file and the open mode allows
246writing (i.e., is O_RDWR or O_WRONLY) it will be truncated to length 0.
247If the file is a FIFO or terminal device file, the O_TRUNC
248flag is ignored. Otherwise the effect of O_TRUNC is unspecified.
fea681da
MK
249.PP
250Some of these optional flags can be altered using
1c1e15ed 251.BR fcntl ()
fea681da
MK
252after the file has been opened.
253
254The argument
255.I mode
256specifies the permissions to use in case a new file is created. It is
257modified by the process's
258.BR umask
259in the usual way: the permissions of the created file are
260.BR "(mode & ~umask)" .
261Note that this mode only applies to future accesses of the
262newly created file; the
1c1e15ed 263.BR open ()
fea681da
MK
264call that creates a read-only file may well return a read/write
265file descriptor.
266.PP
267The following symbolic constants are provided for
268.IR mode :
269.TP
270.B S_IRWXU
27100700 user (file owner) has read, write and execute permission
272.TP
273.B S_IRUSR (S_IREAD)
27400400 user has read permission
275.TP
276.B S_IWUSR (S_IWRITE)
27700200 user has write permission
278.TP
279.B S_IXUSR (S_IEXEC)
28000100 user has execute permission
281.TP
282.B S_IRWXG
28300070 group has read, write and execute permission
284.TP
285.B S_IRGRP
28600040 group has read permission
287.TP
288.B S_IWGRP
28900020 group has write permission
290.TP
291.B S_IXGRP
29200010 group has execute permission
293.TP
294.B S_IRWXO
29500007 others have read, write and execute permission
296.TP
297.B S_IROTH
29800004 others have read permission
299.TP
300.B S_IWOTH
d301ee6c 30100002 others have write permission
fea681da
MK
302.TP
303.B S_IXOTH
30400001 others have execute permission
305.PP
306.I mode
307must be specified when
308.B O_CREAT
309is in the
310.IR flags ,
311and is ignored otherwise.
312
1c1e15ed 313.BR creat ()
fea681da 314is equivalent to
1c1e15ed 315.BR open ()
fea681da
MK
316with
317.I flags
318equal to
319.BR O_CREAT|O_WRONLY|O_TRUNC .
320.SH "RETURN VALUE"
e1d6264d
MK
321.BR open ()
322and
323.BR creat ()
1c1e15ed
MK
324return the new file descriptor, or \-1 if an error occurred
325(in which case,
fea681da
MK
326.I errno
327is set appropriately).
328Note that
1c1e15ed 329.BR open ()
fea681da 330can open device special files, but
1c1e15ed 331.BR creat ()
e9496f74 332cannot create them; use
fea681da
MK
333.BR mknod (2)
334instead.
335.LP
e366dbc4 336On NFS file systems with UID mapping enabled, \fBopen\fP() may
1c1e15ed
MK
337return a file descriptor but e.g. \fBread\fP(2) requests are denied
338with \fBEACCES\fP.
e366dbc4 339This is because the client performs \fBopen\fP() by checking the
1c1e15ed
MK
340permissions, but UID mapping is performed by the server upon
341read and write requests.
fea681da 342
310b7919
MK
343If the file is newly created, its st_atime, st_ctime, st_mtime fields
344(respectively, time of last access, time of last status change, and
345time of last modification; see
346.BR stat (2))
347are set
348to the current time, and so are the st_ctime and st_mtime fields of the
fea681da
MK
349parent directory.
350Otherwise, if the file is modified because of the O_TRUNC flag,
310b7919 351its st_ctime and st_mtime fields are set to the current time.
fea681da
MK
352.SH ERRORS
353.TP
354.B EACCES
355The requested access to the file is not allowed, or search permission
356is denied for one of the directories in the path prefix of
357.IR pathname ,
358or the file did not exist yet and write access to the parent directory
359is not allowed.
360(See also
361.BR path_resolution (2).)
362.TP
363.B EEXIST
364.I pathname
365already exists and
366.BR O_CREAT " and " O_EXCL
367were used.
368.TP
369.B EFAULT
e1d6264d
MK
370.IR pathname
371points outside your accessible address space.
fea681da
MK
372.TP
373.B EISDIR
374.I pathname
375refers to a directory and the access requested involved writing
376(that is,
377.B O_WRONLY
378or
379.B O_RDWR
380is set).
381.TP
382.B ELOOP
383Too many symbolic links were encountered in resolving
384.IR pathname ,
385or \fBO_NOFOLLOW\fR was specified but
386.I pathname
387was a symbolic link.
388.TP
389.B EMFILE
390The process already has the maximum number of files open.
391.TP
392.B ENAMETOOLONG
e1d6264d
MK
393.IR pathname
394was too long.
fea681da
MK
395.TP
396.B ENFILE
397The system limit on the total number of open files has been reached.
398.TP
399.B ENODEV
400.I pathname
401refers to a device special file and no corresponding device exists.
e9496f74 402(This is a Linux kernel bug; in this situation ENXIO must be returned.)
fea681da
MK
403.TP
404.B ENOENT
405O_CREAT is not set and the named file does not exist.
406Or, a directory component in
407.I pathname
408does not exist or is a dangling symbolic link.
409.TP
410.B ENOMEM
411Insufficient kernel memory was available.
412.TP
413.B ENOSPC
414.I pathname
415was to be created but the device containing
416.I pathname
417has no room for the new file.
418.TP
419.B ENOTDIR
420A component used as a directory in
421.I pathname
422is not, in fact, a directory, or \fBO_DIRECTORY\fR was specified and
423.I pathname
424was not a directory.
425.TP
426.B ENXIO
427O_NONBLOCK | O_WRONLY is set, the named file is a FIFO and
428no process has the file open for reading.
429Or, the file is a device special file and no corresponding device exists.
430.TP
431.B EOVERFLOW
432.I pathname
e9496f74 433refers to a regular file, too large to be opened; see O_LARGEFILE above.
fea681da 434.TP
1c1e15ed
MK
435.B EPERM
436The
437.B O_NOATIME
438flag was specified, but the effective user ID of the caller
439.\" Strictly speaking, it's the file system UID... (MTK)
440did not match the owner of the file and the caller was not privileged
441.RB ( CAP_FOWNER ).
442.TP
fea681da
MK
443.B EROFS
444.I pathname
445refers to a file on a read-only filesystem and write access was
446requested.
447.TP
448.B ETXTBSY
449.I pathname
450refers to an executable image which is currently being executed and
451write access was requested.
452.SH NOTE
453Under Linux, the O_NONBLOCK flag indicates that one wants to open
454but does not necessarily have the intention to read or write.
455This is typically used to open devices in order to get a file descriptor
456for use with
457.BR ioctl (2).
458.SH "CONFORMING TO"
b14d4aa5 459SVr4, SVID, POSIX, X/OPEN, 4.3BSD.
fea681da 460The
1c1e15ed
MK
461.BR O_NOATIME ,
462.BR O_NOFOLLOW ,
fea681da
MK
463and
464.B O_DIRECTORY
465flags are Linux-specific.
466One may have to define the
467.B _GNU_SOURCE
468macro to get their definitions.
469.LP
470The (undefined) effect of
471.B O_RDONLY | O_TRUNC
1f6ceb40 472varies among implementations. On many systems the file is actually
fea681da
MK
473truncated.
474.\" Linux 2.0, 2.5: truncate
475.\" Solaris 5.7, 5.8: truncate
476.\" Irix 6.5: truncate
477.\" Tru64 5.1B: truncate
478.\" HP-UX 11.22: truncate
479.\" FreeBSD 4.7: truncate
480.LP
481The
482.B O_DIRECT
483flag was introduced in SGI IRIX, where it has alignment restrictions
484similar to those of Linux 2.4. IRIX has also a fcntl(2) call to
485query appropriate alignments, and sizes. FreeBSD 4.x introduced
486a flag of same name, but without alignment restrictions.
487Support was added under Linux in kernel version 2.4.10.
488Older Linux kernels simply ignore this flag.
1f6ceb40
MK
489One may have to define the
490.B _GNU_SOURCE
491macro to get its definition.
fea681da
MK
492.SH BUGS
493"The thing that has always disturbed me about O_DIRECT is that the whole
494interface is just stupid, and was probably designed by a deranged monkey
e9496f74 495on some serious mind-controlling substances." \(em Linus
fea681da
MK
496.SH RESTRICTIONS
497There are many infelicities in the protocol underlying NFS, affecting
498amongst others
499.BR O_SYNC " and " O_NDELAY .
500
501POSIX provides for three different variants of synchronised I/O,
502corresponding to the flags \fBO_SYNC\fR, \fBO_DSYNC\fR and
503\fBO_RSYNC\fR. Currently (2.1.130) these are all synonymous under Linux.
504.SH "SEE ALSO"
505.BR close (2),
e366dbc4 506.BR dup (2),
fea681da
MK
507.BR fcntl (2),
508.BR link (2),
1f6ceb40 509.BR lseek (2),
fea681da
MK
510.BR mknod (2),
511.BR mount (2),
e366dbc4 512.BR mmap (2),
fea681da
MK
513.BR path_resolution (2),
514.BR read (2),
515.BR socket (2),
516.BR stat (2),
517.BR umask (2),
518.BR unlink (2),
519.BR write (2),
520.BR fopen (3),
521.BR fifo (4)