Provided by:
manpages-zh_1.5.2-1_all 
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
linuxman:
http://cmpp.linuxforum.net