OPEN 2 1999-06-03

中文man手册

OPEN

NAME
SYNOPSIS æ»è§
æè¿° (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