open

OPEN(2)                          System calls                          OPEN(2)



NAME
       open, creat - ç¨æ¥ æå¼åå建 ä¸ä¸ª æ件æ设å¤

SYNOPSIS æ»è§
       #includ e <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



Linux                             1999-06-03                           OPEN(2)