📄 open.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta name="generator" content="HTML Tidy, see www.w3.org"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="style.css"><!-- Generated by The Open Group's rhtm tool v1.2.1 --><!-- Copyright (c) 2001-2004 IEEE and The Open Group, All Rights Reserved --><title>open</title></head><body bgcolor="white"><script type="text/javascript" language="JavaScript" src="../jscript/codes.js"></script><basefont size="3"> <a name="open"></a> <a name="tag_03_410"></a><!-- open --> <!--header start--><center><font size="2">The Open Group Base Specifications Issue 6<br>IEEE Std 1003.1, 2004 Edition<br>Copyright © 2001-2004 The IEEE and The Open Group, All Rights reserved.</font></center><!--header end--><hr size="2" noshade><h4><a name="tag_03_410_01"></a>NAME</h4><blockquote>open - open a file</blockquote><h4><a name="tag_03_410_02"></a>SYNOPSIS</h4><blockquote class="synopsis"><div class="box"><code><tt><sup>[<a href="javascript:open_code('OH')">OH</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0"> #include <sys/stat.h> <img src="../images/opt-end.gif" alt="[Option End]" border="0"></tt></code></div><tt><br> #include <<a href="../basedefs/fcntl.h.html">fcntl.h</a>><br><br> int open(const char *</tt><i>path</i><tt>, int</tt> <i>oflag</i><tt>, ... );<br></tt></blockquote><h4><a name="tag_03_410_03"></a>DESCRIPTION</h4><blockquote><p>The <i>open</i>() function shall establish the connection between a file and a file descriptor. It shall create an open filedescription that refers to a file and a file descriptor that refers to that open file description. The file descriptor is used byother I/O functions to refer to that file. The <i>path</i> argument points to a pathname naming the file.</p><p>The <i>open</i>() function shall return a file descriptor for the named file that is the lowest file descriptor not currentlyopen for that process. The open file description is new, and therefore the file descriptor shall not share it with any otherprocess in the system. The FD_CLOEXEC file descriptor flag associated with the new file descriptor shall be cleared.</p><p>The file offset used to mark the current position within the file shall be set to the beginning of the file.</p><p>The file status flags and file access modes of the open file description shall be set according to the value of<i>oflag</i>.</p><p>Values for <i>oflag</i> are constructed by a bitwise-inclusive OR of flags from the following list, defined in <a href="../basedefs/fcntl.h.html"><i><fcntl.h></i></a>. Applications shall specify exactly one of the first three values (fileaccess modes) below in the value of <i>oflag</i>:</p><dl compact><dt>O_RDONLY</dt><dd>Open for reading only.</dd><dt>O_WRONLY</dt><dd>Open for writing only.</dd><dt>O_RDWR</dt><dd>Open for reading and writing. The result is undefined if this flag is applied to a FIFO.</dd></dl><p>Any combination of the following may be used:</p><dl compact><dt>O_APPEND</dt><dd>If set, the file offset shall be set to the end of the file prior to each write.</dd><dt>O_CREAT</dt><dd>If the file exists, this flag has no effect except as noted under O_EXCL below. Otherwise, the file shall be created; the userID of the file shall be set to the effective user ID of the process; the group ID of the file shall be set to the group ID of thefile's parent directory or to the effective group ID of the process; and the access permission bits (see <a href="../basedefs/sys/stat.h.html"><i><sys/stat.h></i></a>) of the file mode shall be set to the value of the third argument takenas type <b>mode_t</b> modified as follows: a bitwise AND is performed on the file-mode bits and the corresponding bits in thecomplement of the process' file mode creation mask. Thus, all bits in the file mode whose corresponding bit in the file modecreation mask is set are cleared. When bits other than the file permission bits are set, the effect is unspecified. The thirdargument does not affect whether the file is open for reading, writing, or for both. Implementations shall provide a way toinitialize the file's group ID to the group ID of the parent directory. Implementations may, but need not, provide animplementation-defined way to initialize the file's group ID to the effective group ID of the calling process.</dd><dt>O_DSYNC</dt><dd><sup>[<a href="javascript:open_code('SIO')">SIO</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">Write I/O operations on the file descriptor shall complete as defined by synchronized I/O data integrity completion. <img src="../images/opt-end.gif" alt="[Option End]" border="0"></dd><dt>O_EXCL</dt><dd>If O_CREAT and O_EXCL are set, <i>open</i>() shall fail if the file exists. The check for the existence of the file and thecreation of the file if it does not exist shall be atomic with respect to other threads executing <i>open</i>() naming the samefilename in the same directory with O_EXCL and O_CREAT set. If O_EXCL and O_CREAT are set, and <i>path</i> names a symbolic link,<i>open</i>() shall fail and set <i>errno</i> to [EEXIST], regardless of the contents of the symbolic link. If O_EXCL is set andO_CREAT is not set, the result is undefined.</dd><dt>O_NOCTTY</dt><dd>If set and <i>path</i> identifies a terminal device, <i>open</i>() shall not cause the terminal device to become thecontrolling terminal for the process.</dd><dt>O_NONBLOCK</dt><dd>When opening a FIFO with O_RDONLY or O_WRONLY set: <ul><li><p>If O_NONBLOCK is set, an <i>open</i>() for reading-only shall return without delay. An <i>open</i>() for writing-only shallreturn an error if no process currently has the file open for reading.</p></li><li><p>If O_NONBLOCK is clear, an <i>open</i>() for reading-only shall block the calling thread until a thread opens the file forwriting. An <i>open</i>() for writing-only shall block the calling thread until a thread opens the file for reading.</p></li></ul><p>When opening a block special or character special file that supports non-blocking opens:</p><ul><li><p>If O_NONBLOCK is set, the <i>open</i>() function shall return without blocking for the device to be ready or available.Subsequent behavior of the device is device-specific.</p></li><li><p>If O_NONBLOCK is clear, the <i>open</i>() function shall block the calling thread until the device is ready or available beforereturning.</p></li></ul><p>Otherwise, the behavior of O_NONBLOCK is unspecified.</p></dd><dt>O_RSYNC</dt><dd><sup>[<a href="javascript:open_code('SIO')">SIO</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">Read I/O operations on the file descriptor shall complete at the same level of integrity as specified by the O_DSYNC and O_SYNCflags. If both O_DSYNC and O_RSYNC are set in <i>oflag</i>, all I/O operations on the file descriptor shall complete as defined bysynchronized I/O data integrity completion. If both O_SYNC and O_RSYNC are set in flags, all I/O operations on the file descriptorshall complete as defined by synchronized I/O file integrity completion. <img src="../images/opt-end.gif" alt="[Option End]"border="0"></dd><dt>O_SYNC</dt><dd><sup>[<a href="javascript:open_code('SIO')">SIO</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">Write I/O operations on the file descriptor shall complete as defined by synchronized I/O file integrity completion. <img src="../images/opt-end.gif" alt="[Option End]" border="0"></dd><dt>O_TRUNC</dt><dd>If the file exists and is a regular file, and the file is successfully opened O_RDWR or O_WRONLY, its length shall be truncatedto 0, and the mode and owner shall be unchanged. It shall have no effect on FIFO special files or terminal device files. Its effecton other file types is implementation-defined. The result of using O_TRUNC with O_RDONLY is undefined.</dd></dl><p>If O_CREAT is set and the file did not previously exist, upon successful completion, <i>open</i>() shall mark for update the<i>st_atime,</i> <i>st_ctime</i>, and <i>st_mtime</i> fields of the file and the <i>st_ctime</i> and <i>st_mtime</i> fields of theparent directory.</p><p>If O_TRUNC is set and the file did previously exist, upon successful completion, <i>open</i>() shall mark for update the<i>st_ctime</i> and <i>st_mtime</i> fields of the file.</p><p><sup>[<a href="javascript:open_code('SIO')">SIO</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">If both the O_SYNC and O_DSYNC flags are set, the effect is as if only the O_SYNC flag was set. <img src="../images/opt-end.gif"alt="[Option End]" border="0"></p><p><sup>[<a href="javascript:open_code('XSR')">XSR</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">If <i>path</i> refers to a STREAMS file, <i>oflag</i> may be constructed from O_NONBLOCK OR'ed with either O_RDONLY, O_WRONLY, orO_RDWR. Other flag values are not applicable to STREAMS devices and shall have no effect on them. The value O_NONBLOCK affects theoperation of STREAMS drivers and certain functions applied to file descriptors associated with STREAMS files. For STREAMS drivers,the implementation of O_NONBLOCK is device-specific. <img src="../images/opt-end.gif" alt="[Option End]" border="0"></p><p><sup>[<a href="javascript:open_code('XSI')">XSI</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">If <i>path</i> names the master side of a pseudo-terminal device, then it is unspecified whether <i>open</i>() locks the slave sideso that it cannot be opened. Conforming applications shall call <a href="../functions/unlockpt.html"><i>unlockpt</i>()</a> beforeopening the slave side. <img src="../images/opt-end.gif" alt="[Option End]" border="0"></p><p>The largest value that can be represented correctly in an object of type <b>off_t</b> shall be established as the offset maximumin the open file description.</p></blockquote><h4><a name="tag_03_410_04"></a>RETURN VALUE</h4><blockquote><p>Upon successful completion, the function shall open the file and return a non-negative integer representing the lowest numberedunused file descriptor. Otherwise, -1 shall be returned and <i>errno</i> set to indicate the error. No files shall be created ormodified if the function returns -1.</p></blockquote><h4><a name="tag_03_410_05"></a>ERRORS</h4><blockquote><p>The <i>open</i>() function shall fail if:</p><dl compact><dt>[EACCES]</dt><dd>Search permission is denied on a component of the path prefix, or the file exists and the permissions specified by <i>oflag</i>are denied, or the file does not exist and write permission is denied for the parent directory of the file to be created, orO_TRUNC is specified and write permission is denied.</dd><dt>[EEXIST]</dt><dd>O_CREAT and O_EXCL are set, and the named file exists.</dd><dt>[EINTR]</dt><dd>A signal was caught during <i>open</i>().</dd><dt>[EINVAL]</dt><dd><sup>[<a href="javascript:open_code('SIO')">SIO</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">The implementation does not support synchronized I/O for this file. <img src="../images/opt-end.gif" alt="[Option End]" border="0"></dd><dt>[EIO]</dt><dd><sup>[<a href="javascript:open_code('XSR')">XSR</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">The <i>path</i> argument names a STREAMS file and a hangup or error occurred during the <i>open</i>(). <img src="../images/opt-end.gif" alt="[Option End]" border="0"></dd><dt>[EISDIR]</dt><dd>The named file is a directory and <i>oflag</i> includes O_WRONLY or O_RDWR.</dd><dt>[ELOOP]</dt><dd>A loop exists in symbolic links encountered during resolution of the <i>path</i> argument.</dd><dt>[EMFILE]</dt><dd>{OPEN_MAX} file descriptors are currently open in the calling process.</dd><dt>[ENAMETOOLONG]</dt><dd>The length of the <i>path</i> argument exceeds {PATH_MAX} or a pathname component is longer than {NAME_MAX}.</dd><dt>[ENFILE]</dt><dd>The maximum allowable number of files is currently open in the system.</dd><dt>[ENOENT]</dt><dd>O_CREAT is not set and the named file does not exist; or O_CREAT is set and either the path prefix does not exist or the<i>path</i> argument points to an empty string.</dd><dt>[ENOSR]</dt><dd><sup>[<a href="javascript:open_code('XSR')">XSR</a>]</sup> <img src="../images/opt-start.gif" alt="[Option Start]" border="0">The <i>path</i> argument names a STREAMS-based file and the system is unable to allocate a STREAM. <img src="../images/opt-end.gif"alt="[Option End]" border="0"></dd><dt>[ENOSPC]</dt><dd>The directory or file system that would contain the new file cannot be expanded, the file does not exist, and O_CREAT isspecified.</dd><dt>[ENOTDIR]</dt><dd>A component of the path prefix is not a directory.</dd><dt>[ENXIO]</dt><dd>O_NONBLOCK is set, the named file is a FIFO, O_WRONLY is set, and no process has the file open for reading.</dd><dt>[ENXIO]</dt><dd>The named file is a character special or block special file, and the device associated with this special file does notexist.</dd><dt>[EOVERFLOW]</dt><dd>The named file is a regular file and the size of the file cannot be represented correctly in an object of type
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -