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 位。那么,