OPEN 2 1999-06-03
目录
- NAME open, creat
- SYNOPSIS 总览
.nf
.B #include
.B #include .B #include .sp .BI - 描述 (DESCRIPTION)
- RETURN VALUE 返回值 .BR open
- ERRORS 错误信息 .TP .B EEXIST 参数 .BR O_CREAT
- CONFORMING TO
- RESTRICTIONS 无限制 There are many infelicities in the protocol underlying NFS, affecting amongst others .BR O_SYNC
- SEE ALSO 参见 .BR read (2), .BR write (2), .BR fcntl (2), .BR close (2), .BR link (2), .BR mknod (2), .BR mount (2), .BR stat (2), .BR umask (2), .BR unlink (2), .BR socket (2), .BR fopen (3), .BR fifo (4) .SH
- [中文版最新更新]
- 《中国linux论坛man手册页翻译计划》:
- 跋
OPEN
NAMESYNOPSIS æ»è§
æè¿° (DESCRIPTION)
RETURN VALUE è¿åå¼
ERRORS é误信æ¯
CONFORMING TO
RESTRICTIONS æ éå¶
SEE ALSO åè§
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·
NAME
open, creat - æå¼å/æå建ä¸ä¸ªæä»¶
SYNOPSIS æ»è§
#include
<sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int
open(const char *pathname, int
flags);
int open(const char *pathname, int
flags, mode_t mode)
int creat(const char *pathname, mode_t
mode);
æè¿° (DESCRIPTION)
open() é常ç¨äºå°è·¯å¾å转æ¢ä¸ºä¸ä¸ªæä»¶æè¿°ç¬¦ï¼ä¸ä¸ªéè´çå°æ´æ°ï¼å¨ read , write ç I/O æä½ä¸å°ä¼è¢«ä½¿ç¨ï¼ãå½ open() è°ç¨æåï¼å®ä¼è¿åä¸ä¸ªæ°çæä»¶æè¿°ç¬¦ï¼æ°¸è¿åæªç¨æè¿°ç¬¦çæå°å¼ï¼ã è¿ä¸ªè°ç¨å建ä¸ä¸ªæ°çæå¼æä»¶ï¼å³åéä¸ä¸ªæ°çç¬ä¸æ äºçæä»¶æè¿°ç¬¦ï¼ä¸ä¼ä¸è¿è¡ä¸çä»»ä½å¶ä»ç¨åºå±äº«ï¼ä½å¯ä»¥éè¿ fork (2) ç³»ç»è°ç¨å®ç°å±äº«ï¼ã è¿ä¸ªæ°çæä»¶æè¿°ç¬¦å¨å¶å对æå¼æä»¶æä½ç彿°ä¸- 使ç¨ï¼åè fcntl(2) ï¼æä»¶ç读åæéè¢«ç½®äºæä»¶å¤´
åæ°
flags æ¯éè¿
O_RDONLY, O_WRONLY æ O_RDWR
(ææ æä»¶
æ¯ä»¥
åªè¯» , åªå
æ 读å
æ¹å¼ æå¼ç)
ä¸ ä¸é¢ç
é¶ä¸ª æ
å¤ä¸ª
å¯é模å¼
æä½ -or æä½
å¾å°ç:
O_CREAT
è¥æä»¶ ä¸åå¨ å° å建 ä¸ä¸ª æ° æä»¶. æ° æä»¶ ç å±ä¸» (ç¨æ·ID) 被 设置 为 æ¤ ç¨åº ç ææ ç¨æ· ç ID. åæ · æä»¶ æå± åç» ä¹ è¢« 设置 为 æ¤ ç¨åº ç ææ åç» ç ID æè ä¸å± ç®å½ ç åç» ID (è¿ ä¾èµ æä»¶ç³»ç» ç±»å ,è£è½½é项 å ä¸å±ç®å½ ç æ¨¡å¼, åè,å¨ mount(8) ä¸ æè¿° ç ext2 æä»¶ç³»ç» ç è£è½½é项 bsdgroups å sysvgroups )
|
O_EXCL |
éè¿ O_CREAT, çæ æä»¶ , è¥ æä»¶ å·²ç» åå¨ , å open åºé , è°ç¨ 失败 . è¥æ¯ åå¨ ç¬¦å·èæ¥ , å°ä¼ æ å®ç èæ¥æé ç æå æä»¶ 忽ç¥. O_EXCL is broken on NFS file systems, programs which rely on it for performing locking tasks will contain a race condition. The solution for performing atomic file locking using a lockfile is to create a unique file on the same fs (e.g., incorporating hostname and pid), use link(2) to make a link to the lockfile. If link() returns 0, the lock is successful. Otherwise, use stat(2) on the unique file to check if its link count has increased to 2, in which case the lock is also successful. |
O_NOCTTY
åå¦ pathname å¼ç¨ ä¸ä¸ª ç»ç«¯è®¾å¤ — åè tty(4) — å³ä½¿ è¿ç¨ æ²¡æ æ§å¶ç»ç«¯ ,è¿ä¸ª ç»ç«¯ ä¹ ä¸ä¼ åæ è¿ç¨ ç æ§å¶ ç»ç«¯.
O_TRUNC
åå¦ æä»¶ å·²ç» åå¨ , 䏿¯ ä¸ä¸ª æ®é æä»¶ ,æå¼ æ¨¡å¼ åæ¯ å¯å(å³ æä»¶ æ¯ ç¨ O_RDWR æ O_WRONLY æ¨¡å¼ æå¼ ç) , å°±æ æä»¶ ç é¿åº¦ 设置 为 é¶ , ä¸¢å¼ å¶ä¸ ç ç°æ å容.è¥ æä»¶ æ¯ ä¸ä¸ª FIFO æ ç»ç«¯è®¾å¤ æä»¶ , O_TRUNC æ å¿ è¢« 忽ç¥. å¶ä» O_TRUNC ç ä½ç¨ æ¯ ä¸ å·ä½ æå® ç (å¨ è®¸å¤ Linux çæ¬ ä¸ , é常 ä¼ è¢« å¿½ç¥ , å¶ä» ç ä¸äº çæ¬ å° è¿å ä¸ä¸ª é误)
O_APPEND
æä»¶ 以 è¿½å æ¨¡å¼ æå¼ . å¨ å 以å , æä»¶ è¯»å æé 被 ç½® å¨ æä»¶ ç æ«å°¾ . as if with lseek. O_APPEND may lead to corrupted files on NFS file systems if more than one process appends data to a file at once. This is because NFS does not support appending to a file, so the client kernel has to simulate it, which can’t be done without a race condition.
O_NONBLOCK æ O_NDELAY
æå¼(open) æä»¶ å¯ä»¥ 以 éå(non-blocking) æ¨¡å¼ æå¼ . æ¤æ¶ æä»¶ å¹¶ æ²¡æ æå¼ , ä¹ ä¸è½ ä½¿ç¨ è¿å ç æä»¶æè¿°ç¬¦ è¿è¡ åç» æä½ , èæ¯ 使 è°ç¨ ç¨åº çå¾ . æ¤ æ¨¡å¼ æ¯ ä¸ºäº FIFO (å½å管é) ç å¤ç , åè fifo(4). è¿ç§ æ¨¡å¼ å¯¹ é¤äº FIFO å¤ æ²¡æ ä»»ä½ å½±å .
|
O_SYNC |
æå¼ æä»¶ å®ç° I/O ç 忥 . ä»»ä½ éè¿ æä»¶æè¿°ç¬¦ 对 æä»¶ ç write é½ä¼ 使 è°ç¨ ç è¿ç¨ 䏿 , ç´å° æ°æ® 被 çæ£ åå¥ ç¡¬ä»¶ ä¸ . å¶ä» , åè RESTRICTIONS. |
O_NOFOLLOW
åå¦
pathname æ¯
ä¸ä¸ª
ç¬¦å· èæ¥ ,
å æå¼
失败 .
è¿æ¯ FreeBSD ç
æ©å , ä» 2.1.126
çæ¬ 以æ¥
被 å¼å¥
å° Linux 䏿¥ . ä»
glibc2.0.100 åº ä»¥æ¥ ,
头æä»¶
ä¸ åæ¬ äº
è¿ä¸ª åæ°
ç å®ä¹;
kernel 2.1.126 以å å°
å¿½ç¥ å®ç
使ç¨.
O_DIRECTORY
åå¦ pathname 䏿¯ ç®å½ , æå¼ å°± 失败 . è¿ä¸ª åæ° æ¯ Linux ç¹æ ç , å¨ kernel 2.1.126 ä¸ å å¥ , ä¸ºäº é¿å å¨ è°ç¨ FIFO æ ç£å¸¦è®¾å¤ æ¶ ç denial-of-service é®é¢ , 使¯ ä¸åºè¯¥ å¨ æ§è¡ opendir ä»¥å¤ ä½¿ç¨.
O_LARGEFILE
å¨ 32ä½ ç³»ç» ä¸ æ¯æ 大 æä»¶ç³»ç» , å许 æå¼ é£äº ç¨ 31ä½ é½ ä¸è½ 表示 å¶ é¿åº¦ ç 大 æä»¶ .
å¨ æä»¶ æå¼ å , è¿äº å¯é åæ° å¯ä»¥ éè¿ fcntl æ¥ æ¹å .
å¨ æ°æä»¶ 被 å建 æ¶ , åæ° mode å·ä½ ææ äº ä½¿ç¨ æé . ä» é常 ä¹ ä¼ è¢« umask ä¿®æ¹ . æä»¥ ä¸è¬ æ°å»º æä»¶ ç æé 为 (mode & ˜umask). æ³¨æ æ¨¡å¼ åª è¢« åºç¨ äº å°æ¥ 对 è¿ æ°æä»¶ ç ä½¿ç¨ ä¸; open è°ç¨ å建 ä¸ä¸ª æ°ç åªè¯» æä»¶ , ä½ ä» å° è¿å ä¸ä¸ª å¯ è¯»å æä»¶ æè¿°ç¬¦.
åé¢
æ¯ ä¸äº mode ç
å·ä½ åæ°:
S_IRWXU
00700 å许 æä»¶ ç å±ä¸» 读 , å å æ§è¡ æä»¶
S_IRUSR (S_IREAD)
00400 å许 æä»¶ ç å±ä¸» 读 æä»¶
S_IWUSR (S_IWRITE)
00200 å许 æä»¶ ç å±ä¸» å æä»¶
S_IXUSR (S_IEXEC)
00100 å许 æä»¶ ç å±ä¸» æ§è¡ æä»¶
S_IRWXG
00070 å许 æä»¶ æå¨ ç åç» è¯» , å å æ§è¡ æä»¶
S_IRGRP
00040 å许 æä»¶ æå¨ ç åç» è¯» æä»¶
S_IWGRP
00020 å许 æä»¶ æå¨ ç åç» å æä»¶
S_IXGRP
00010 å许 æä»¶ æå¨ ç åç» æ§è¡ æä»¶
S_IRWXO
00007 å许 å¶ä» ç¨æ· 读 , å å æ§è¡ æä»¶
S_IROTH
00004 å许 å¶ä» ç¨æ· 读 æä»¶
S_IWOTH
00002 å许 å¶ä» ç¨æ· å æä»¶
S_IXOTH
00001 å许 å¶ä» ç¨æ· æ§è¡ æä»¶
mode åªæ å½ å¨ flags ä¸ ä½¿ç¨ O_CREAT æ¶ æ ææ , å¦å 被 忽ç¥.
creat ç¸å½ äº open ç åæ° flags çäº O_CREAT|O_WRONLY|O_TRUNC.
RETURN VALUE è¿åå¼
open å creat é½ è¿å ä¸ä¸ª æ°ç æä»¶æè¿°ç¬¦ (è¥æ¯ æ é误 åç è¿å -1 ,å¹¶å¨ errno 设置 é误 ä¿¡æ¯). 注æ open å¯ä»¥ æå¼ è®¾å¤ ä¸ç¨ æä»¶ , 使¯ creat ä¸è½å建,éè¦ç¨ mknod(2) æ¥ä»£æ¿.
On NFS file systems with UID mapping enabled, open may return a file descriptor but e.g. read(2) requests are denied with EACCES. This is because the client performs open by checking the permissions, but UID mapping is performed by the server upon read and write requests.
è¥ æä»¶ æ¯ æ° å»ºç« ç , ä» ç atime(䏿¬¡è®¿é®æ¶é´), ctime(å建æ¶é´), mtime(ä¿®æ¹æ¶é´) é½ è¢« ä¿®æ¹ ä¸º å½å æ¶é´ , ä¸å± ç®å½ çatime , ctime ä¹ è¢« åæ · ä¿®æ¹ . å¶ä»ç , åå¦ æä»¶ æ¯ ç± O_TRUNC åæ° ä¿®æ¹ ç ,å®ç ctime , mtime å ä¹ è¢« 设置 为 å½å æ¶é´.
ERRORS é误信æ¯
|
EEXIST |
åæ° O_CREAT and O_EXCL 被 使ç¨,使¯æä»¶( pathname )å·²ç»åå¨. |
|||
|
EISDIR |
æä»¶å ( pathname ) æ¯ ä¸ä¸ª ç®å½ , è å æ¶å å° å æä½. |
|||
|
EACCES |
è®¿é® è¯·æ± ä¸ å许 (æéä¸å¤) , å¨ æä»¶å ( pathname )ä¸ æ ä¸ ç®å½ ä¸å许 æç´¢ (æ²¡æ æ§è¡æé) , æè æä»¶ è¿ ä¸åå¨ ä¸ å¯¹ ä¸å±ç®å½ ç å æä½ å ä¸å许.
ENAMETOOLONG
æä»¶å ( pathname ) 太 é¿ äº
|
ENOENT |
ç®å½ ( pathname ) ä¸åå¨ æè æ¯ ä¸ä¸ª æ¬ç©º ç ç¬¦å· èæ¥. |
ENOTDIR
pathname 䏿¯ ä¸ä¸ª åç®å½
|
ENXIO |
ä½¿ç¨ O_NONBLOCK | O_WRONLY, å½å ç æä»¶ æ¯ FIFO , æè¯» æä»¶ è¿ æ²¡æ æå¼ ç æä»¶ , æè , æå¼ ä¸ä¸ª è®¾å¤ ä¸ç¨ æä»¶ è ç¸åº ç è®¾å¤ ä¸åå¨ | ||
|
ENODEV |
æä»¶ ( pathname ) å¼ç¨ äº ä¸ä¸ª è®¾å¤ ä¸ç¨ æä»¶ , è ç¸åº ç è®¾å¤ å ä¸åå¨. (è¿æ¯ linux kernel ç ä¸ä¸ªbug - ENXIO ä¸å® ä¼ è¢« è¿å .) | ||
|
EROFS |
æä»¶ ( pathname ) æ¯ä¸ä¸ªåªè¯»æä»¶ï¼åæåæä½è¢«è¯·æ±ã |
ETXTBSY
æä»¶ ( pathname ) æ¯ä¸ä¸ªæ£å¨è¢«æ§è¡ç坿§è¡æä»¶ï¼åæåæä½è¢«è¯·æ±ã
|
EFAULT |
pathname å¨ä¸ä¸ªä½ ä¸è½è®¿é®çå°å空é´. | ||
|
ELOOP |
å¨ åè§£ pathname æ¶ , éå° å¤ªå¤ ç¬¦å·èæ¥ æè ææ O_NOFOLLOW 使¯ pathname æ¯ ä¸ä¸ª 符å·èæ¥ | ||
|
ENOSPC |
pathname å°è¦è¢«å建,使¯è®¾å¤å没æç©ºé´å¨å pathname æä»¶äº | ||
|
ENOMEM |
å¯ è·å¾ ç æ ¸å¿åå(kernel memory) ä¸å¤ | ||
|
EMFILE |
ç¨åºæå¼çæä»¶æ°å·²ç»è¾¾å°æå¤§å¼äº | ||
|
ENFILE |
ç³»ç»æå¼çæ»æä»¶æ°å·²ç»è¾¾å°äºæé |
CONFORMING TO
SVr4, SVID, POSIX, X/OPEN, BSD 4.3 The O_NOFOLLOW and O_DIRECTORY flags are Linux-specific. One may have to define the _GNU_SOURCE macro to get their definitions.
RESTRICTIONS æ éå¶
There are many infelicities in the protocol underlying NFS, affecting amongst others O_SYNC and O_NDELAY.
POSIX provides for three different variants of synchronised I/O, corresponding to the flags O_SYNC, O_DSYNC and O_RSYNC. Currently (2.1.130) these are all synonymous under Linux.
SEE ALSO åè§
read(2), write(2), fcntl(2), close(2), link(2), mknod(2), mount(2), stat(2), umask(2), unlink(2), socket(2), fopen(3), fifo(4)
[䏿çç»´æ¤äºº]
Daniel <badlong@163.com>
[ä¸æçææ°æ´æ°]
2002/01/10
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
http://cmpp.linuxforum.net
è·
æ¬é¡µé¢ä¸æçç±ä¸æ
man
æå页计åæä¾ã
䏿 man
æå页计åï¼https://github.com/man-pages-zh/manpages-zh