open系统调用
2016-07-25 11:38
239 查看
open系统调用
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int open(const char *path,int oflags);
int open(const char *path,int oflags, mode_t mode);
简单的说,open建立了一条到文件或设备的访问路径,如果调用成功,它将返回一个可以被read,write和其他系统调用使用的文件描述符。
---------------------------------------------------------------------------------------------------------------------------------------
oflags 参数用于指定打开文件所采取的动作。它是通过必需文件访问模式与其他可选模式相结合的方式来指定的。
必需文件访问模式:
O_RDONLY 以只读方式打开
O_WRONLY 以只写方式打开
O_RDWR 以读写方式打开
可选模式(用“按位或”操作):
O_APPEND 把写入的数据追加在文件的末尾
O_CREAT 如果需要,就按参数mode中给出的访问模式创建文件
O_TRUNC 把文件长度设置为零,丢弃已有的内容
open调用在成功时返回一个新的文件描述符,新文件描述符总是使用未用描述符的最小值,这个特征在某些情况下非常有用。
---------------------------------------------------------------------------------------------------------------------------------------
参数mode是几个标志按位或后得到的,这些标志在sys/stat.h中定义,如下:
S_IRUSR:读权限,文件属主
S_IWUSR:写权限,文件属主
S_IXUSR:执行权限,文件属主
S_IRGRP:读权限,文件所属组
S_IWGRP:写权限,文件所属组
S_IXGRP:执行权限,文件所属组
S_IROTH:读权限,其他用户
S_IWOTH:写权限,其他用户
S_IXOTH:执行权限,其他用户
例子:
open("myfile",O_CREAT,S_IRUSR|S_IXOTH);
它的作用是创建一个名为myfile的文件,文件属主拥有读权限,其他用户拥有执行权限。
---------------------------------------------------------------------------------------------------------------------------------------
有几个因素会对文件的访问权限产生影响。首先,指定的访问权限只有在创建文件时才会使用,其次用户掩码(由shell的umask命令设定)会影响到被创建文件的访问权限。open调用里给出的mode值将与当时的用户掩码的反值做AND操作。
举例来说,如果用户掩码被设置为001,并且指定了S_IXOTH模式,那么其他用户对创建的文件不会拥有执行权限。因此open和creat调用中的标志实际上是发出设置文件访问权限的请求,所请求的权限是否会被设置取决于当时umask的值。
附:umask
umask是一个系统变量,它的作用是:当文件被创建时。为文件的访问权限设定一个掩码。它是一个由3个八进制数字组成的值。每个数字依次对应着用户、组、其他用户的访问权限,每个数字都是1、2、4的OR操作结果。
0 允许任何权限
1 禁止执行权限
2 禁止写权限
3 禁止读权限
例如:如果要禁止组的写和执行权限,同时禁止其他用户的写权限,那么umask值应该是 032
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
int open(const char *path,int oflags);
int open(const char *path,int oflags, mode_t mode);
简单的说,open建立了一条到文件或设备的访问路径,如果调用成功,它将返回一个可以被read,write和其他系统调用使用的文件描述符。
---------------------------------------------------------------------------------------------------------------------------------------
oflags 参数用于指定打开文件所采取的动作。它是通过必需文件访问模式与其他可选模式相结合的方式来指定的。
必需文件访问模式:
O_RDONLY 以只读方式打开
O_WRONLY 以只写方式打开
O_RDWR 以读写方式打开
可选模式(用“按位或”操作):
O_APPEND 把写入的数据追加在文件的末尾
O_CREAT 如果需要,就按参数mode中给出的访问模式创建文件
O_TRUNC 把文件长度设置为零,丢弃已有的内容
open调用在成功时返回一个新的文件描述符,新文件描述符总是使用未用描述符的最小值,这个特征在某些情况下非常有用。
---------------------------------------------------------------------------------------------------------------------------------------
参数mode是几个标志按位或后得到的,这些标志在sys/stat.h中定义,如下:
S_IRUSR:读权限,文件属主
S_IWUSR:写权限,文件属主
S_IXUSR:执行权限,文件属主
S_IRGRP:读权限,文件所属组
S_IWGRP:写权限,文件所属组
S_IXGRP:执行权限,文件所属组
S_IROTH:读权限,其他用户
S_IWOTH:写权限,其他用户
S_IXOTH:执行权限,其他用户
例子:
open("myfile",O_CREAT,S_IRUSR|S_IXOTH);
它的作用是创建一个名为myfile的文件,文件属主拥有读权限,其他用户拥有执行权限。
---------------------------------------------------------------------------------------------------------------------------------------
有几个因素会对文件的访问权限产生影响。首先,指定的访问权限只有在创建文件时才会使用,其次用户掩码(由shell的umask命令设定)会影响到被创建文件的访问权限。open调用里给出的mode值将与当时的用户掩码的反值做AND操作。
举例来说,如果用户掩码被设置为001,并且指定了S_IXOTH模式,那么其他用户对创建的文件不会拥有执行权限。因此open和creat调用中的标志实际上是发出设置文件访问权限的请求,所请求的权限是否会被设置取决于当时umask的值。
附:umask
umask是一个系统变量,它的作用是:当文件被创建时。为文件的访问权限设定一个掩码。它是一个由3个八进制数字组成的值。每个数字依次对应着用户、组、其他用户的访问权限,每个数字都是1、2、4的OR操作结果。
0 允许任何权限
1 禁止执行权限
2 禁止写权限
3 禁止读权限
例如:如果要禁止组的写和执行权限,同时禁止其他用户的写权限,那么umask值应该是 032
相关文章推荐
- Linux查看CPU和内存使用情况【转】
- Linux基础命令
- Linux(centOS6.5)下SVN的安装、配置及开机启动
- CentOS搭建Nginx+Subversion环境(包括多个版本库的配置)
- linux centos 基本命令
- CentOS下采用Crontab实现PHP脚本定时任务
- Linux之用户身份的查看与切换(su+sudo)
- Linux core 文件介绍
- Linux下设置本地yum安装源
- R第一问 CentOS6.5 修改 /etc/sudoers 提示只读
- Linux源代码目录结构说明
- 菜鸟的Linux苦逼之路4 vim编辑器
- attr()和prop()的区别
- 从本机构建Linux应用程序VHD映像
- hadoop常见错误的原因
- 从Azure上构建Linux应用程序映像
- linux shell数据重定向(输入重定向与输出重定向)详细分析
- 改变tomcat的默认欢迎界面
- 为什么Nginx的性能要比Apache高很多?
- 几个Linux命令