2 .TH OPEN 2 1999-06-03 "Linux" "System calls"
4 open, creat \- 用来 打开和创建 一个 文件或设备
7 .B #includ e <sys/types.h>
8 .B #include <sys/stat.h>
11 .BI "int open(const char *" pathname ", int " flags );
12 .BI "int open(const char *" pathname ", int " flags ", mode_t " mode )
13 .BI "int creat(const char *" pathname ", mode_t " mode );
15 .SH "描述 (DESCRIPTION)"
17 通常 用于 将 路径名 转换为 一个 文件描述符 (一个 非负的 小 整数, 在
21 调用 成功, 它会 返回 一个 新的 文件描述符 (永远取 未用 描述符的 最小值).
22 这个调用 创建 一个 新的 打开文件, 即 分配 一个 新的 独一无
23 二的 文件描述符, 不会与 运行中的 任何 其他程序 共享 (但 可以 通过
26 这个 新的 文件描述符 在其后 对 打开文件操作 的函数 中 使用.(参考
33 .BR O_RDONLY ", " O_WRONLY " 或 " O_RDWR
34 (指明 文件 是以 只读 , 只写 或 读写 方式 打开的)
41 新 文件 的 属主 (用户ID) 被 设置 为 此 程序 的 有效 用户 的 ID.
42 同样 文件 所属 分组 也 被 设置 为 此 程序 的 有效 分组 的 ID
43 或者 上层 目录 的 分组 ID (这 依赖 文件系统 类型 ,装载选项 和 上层目录 的 模式,
46 中 描述 的 ext2 文件系统 的 装载选项
55 生成 文件 , 若 文件 已经 存在 , 则
57 出错 , 调用 失败 . 若是 存在 符号联接 , 将会 把 它的 联接指针 的 指向 文件 忽略.
59 is broken on NFS file systems, programs which rely on it for performing
60 locking tasks will contain a race condition. The solution for performing
61 atomic file locking using a lockfile is to create a unique file on the same
62 fs (e.g., incorporating hostname and pid), use
64 to make a link to the lockfile. If \fBlink()\fP returns 0, the lock is
65 successful. Otherwise, use
67 on the unique file to check if its link count has increased to 2,
68 in which case the lock is also successful.
75 \(em 即使 进程 没有 控制终端 ,这个 终端 也 不会 变成 进程 的 控制 终端.
78 假如 文件 已经 存在 , 且是 一个 普通 文件 ,打开 模式 又是 可写(即 文件 是 用
79 O_RDWR 或 O_WRONLY 模式 打开 的) , 就把 文件 的 长度 设置 为 零 , 丢弃 其中
80 的 现有 内容.若 文件 是 一个 FIFO 或 终端设备 文件 , O_TRUNC 标志 被 忽略.
81 其他 O_TRUNC 的 作用 是 不 具体 指定 的 (在 许多 Linux 版本 中 , 通常 会 被 忽略 ,
82 其他 的 一些 版本 将 返回 一个 错误)
87 以前 , 文件 读写 指针 被 置 在 文件 的 末尾 .
91 may lead to corrupted files on NFS file systems if more than one process
92 appends data to a file at once. This is because NFS does not support
93 appending to a file, so the client kernel has to simulate it, which
94 can't be done without a race condition.
96 .BR O_NONBLOCK " 或 " O_NDELAY
98 文件 可以 以 非块(non-blocking) 模式 打开 . 此时 文件 并 没有 打开 , 也 不能 使用 返回 的
99 文件描述符 进行 后续 操作 , 而是 使 调用 程序 等待 . 此 模式 是 为了 FIFO (命名管道) 的 处理
102 这种 模式 对 除了 FIFO 外 没有 任何 影响 .
105 打开 文件 实现 I/O 的 同步 . 任何 通过 文件描述符 对 文件 的
107 都会 使 调用 的 进程 中断 , 直到 数据 被 真正 写入 硬件 中 .
112 假如 \fIpathname\fR 是 一个 符号 联接 , 则 打开 失败 . 这是 FreeBSD
113 的 扩充 , 从 2.1.126 版本 以来 被 引入 到 Linux 中来 .
114 从 glibc2.0.100 库 以来 , 头文件 中 包括 了 这个 参数 的 定义;
115 \fI kernel 2.1.126 以前 将 忽略 它的 使用\fR.
118 假如 \fIpathname\fR 不是 目录 , 打开 就 失败 . 这个 参数 是 Linux 特有 的 ,
119 在 kernel 2.1.126 中 加入 , 为了 避免 在 调用 FIFO 或 磁带设备 时 的 denial-of-service
120 问题 , 但是 不应该 在 执行 \fBopendir\fR 以外 使用.
123 在 32位 系统 中 支持 大 文件系统 , 允许 打开 那些 用 31位 都 不能 表示 其 长度 的 大 文件 .
125 在 文件 打开 后 , 这些 可选 参数 可以 通过
131 具体 指明 了 使用 权限 . 他 通常 也 会 被
133 修改 . 所以 一般 新建 文件 的 权限 为
134 .BR "(mode & ~umask)" .
135 注意 模式 只 被 应用 于 将来 对 这 新文件 的 使用 中;
137 调用 创建 一个 新的 只读 文件 , 但 仍 将 返回 一个 可 读写 文件 描述符.
144 00700 允许 文件 的 属主 读 , 写 和 执行 文件
147 00400 允许 文件 的 属主 读 文件
149 .B S_IWUSR (S_IWRITE)
150 00200 允许 文件 的 属主 写 文件
153 00100 允许 文件 的 属主 执行 文件
156 00070 允许 文件 所在 的 分组 读 , 写 和 执行 文件
159 00040 允许 文件 所在 的 分组 读 文件
162 00020 允许 文件 所在 的 分组 写 文件
165 00010 允许 文件 所在 的 分组 执行 文件
168 00007 允许 其他 用户 读 , 写 和 执行 文件
192 .BR O_CREAT|O_WRONLY|O_TRUNC .
195 都 返回 一个 新的 文件描述符 (若是 有 错误 发生 返回 \-1 ,并在
206 On NFS file systems with UID mapping enabled, \fBopen\fP may return a file
207 descriptor but e.g. \fBread\fP(2) requests are denied with \fBEACCES\fP.
208 This is because the client performs \fBopen\fP by checking the permissions,
209 but UID mapping is performed by the server upon read and write requests.
211 若 文件 是 新 建立 的 , 他 的 atime(上次访问时间), ctime(创建时间), mtime(修改时间) 都 被 修改 为 当前 时间
212 , 上层 目录 的atime , ctime 也 被 同样 修改 . 其他的 , 假如 文件 是 由 O_TRUNC 参数 修改
213 的 ,它的 ctime , mtime 域 也 被 设置 为 当前 时间.
219 .BR O_CREAT " and " O_EXCL
228 ) 是 一个 目录 , 而 又 涉及 到 写 操作.
231 访问 请求 不 允许 (权限不够) , 在 文件名 (
233 )中 有 一 目录 不允许 搜索 (没有 执行权限) , 或者 文件 还 不存在 且 对 上层目录 的 写 操作 又 不允许.
243 ) 不存在 或者 是 一个 悬空 的 符号 联接.
251 O_NONBLOCK | O_WRONLY, 命名 的 文件 是 FIFO , 所读 文件 还 没有 打开 的 文件 ,
252 或者 , 打开 一个 设备 专用 文件 而 相应 的 设备 不存在
257 ) 引用 了 一个 设备 专用 文件 , 而 相应 的 设备 又 不存在.
258 (这是 linux kernel 的 一个bug - ENXIO 一定 会 被 返回 .)
263 ) 是 一个 只读 文件 , 又有 写 操作 被 请求.
268 ) 是 一个 正在 被 执行 的 可 执行 文件 ,又有 写 操作 被 请求.
277 时 , 遇到 太多 符号联接 或者 指明 \fBO_NOFOLLOW\fR 但是
288 可 获得 的 核心内存(kernel memory) 不够
296 SVr4, SVID, POSIX, X/OPEN, BSD 4.3
301 flags are Linux-specific.
302 One may have to define the
304 macro to get their definitions.
306 There are many infelicities in the protocol underlying NFS, affecting
308 .BR O_SYNC " and " O_NDELAY .
310 POSIX provides for three different variants of synchronised I/O,
311 corresponding to the flags \fBO_SYNC\fR, \fBO_DSYNC\fR and
312 \fBO_RSYNC\fR. Currently (2.1.130) these are all synonymous under Linux.
329 .B Daniel <badlong@163.com>
332 .SH "《中国linux论坛man手册页翻译计划》:"
333 .BI http://cmpp.linuxforum.net