background image

open 函数有两个形式,其中 pathname 是我们要打开的文件名(包含路

径名称,缺省是认为在当前路径下面),flags 可以去下面的一个值或者是几
个值的组合:

标志

含义

O_RDONLY

以只读的方式打开文件

O_WRONLY

以只写的方式打开文件

O_RDWR

以读写的方式打开文件

O_APPEND

以追加的方式打开文件

O_CREAT

创建一个文件

O_EXEC

如果使用了 O_CREAT 而且文件

已经存在,就会发生一个错误

O_NOBLOCK

以非阻塞的方式打开一个文件

O_TRUNC

如果文件已经存在,则删除文件
的内容

O_RDONLY、O_WRONLY、O_RDWR 三个标志只能使用任意的一个。

如果使用了 O_CREATE 标志,则使用的函数是 int open(const char 

*pathname,int flags,mode_t mode); 这个时候我们还要指定 mode 标志,
用来表示文件的访问权限。mode 可以是以下情况的组合:

标志

含义

S_IRUSR

用户可以读

S_IWUSR

用户可以写

S_IXUSR

用户可以执行

S_IRWXU

用户可以读、写、执行

S_IRGRP

组可以读

S_IWGRP

组可以写

S_IXGRP

组可以执行

S_IRWXG

组可以读写执行

S_IROTH

其他人可以读

S_IWOTH

其他人可以写

S_IXOTH

其他人可以执行

S_IRWXO

其他人可以读、写、执行

S_ISUID

设置用户执行 ID

S_ISGID

设置组的执行 ID

“ ”

除了可以通过上述宏进行 或 逻辑产生标志以外,我们也可以自己用数字

来表示,Linux 总共用 5 个数字来表示文件的各种权限:第一位表示设置用户
ID;第二位表示设置组 ID;第三位表示用户自己的权限位;第四位表示组的
权限;最后一位表示其他人的权限。每个数字可以取 1(执行权限)、2(写权限)、
4(读权限)、0(无)或者是这些值的和。例如,要创建一个用户可读、可写、可执行,
但是组没有权限,其他人可以读、可以执行的文件,并设置用户 ID 位。那么,