通用文件I/O模型之open

前面介绍了linux系统一切皆文件的概念,系统使用一套系统调用函数open()、read()、write()、close()等可以对所有文件执行I/O操作。应用程序发起的I/O请求,内核会将其转化为相应的文件系统操作,或者设备驱动程序操作。接下来我们一起了解一下open()函数。

open()函数可以打开一个已有文件或创建并打开文件,同时返回文件描述符。函数原型如下:

pathname指定要打开的文件;

flags为打开文件的标志位,控制打开方式;

mode为可选参数,用于指定新创建文件的权限模式。

如果指定的文件不存在,则可以通过在flags中指定O_CREAT,然后open()即可创建。flags参数包含的标志及含义如下表,多个标志可用运算符“|”合并到一起。其中标志参数必须包含O_RDONLY、O_WRONLY、O_RDWR中的一种访问方式。

oflag必须指定下面其中一个:

下面是可选选项:

这些常量可分为三组:文件访问模式标记(可以通过fcntl的F_GETFL进行检索)、文件创建标记(不可以通过fcntl的F_GETFL进行检索或修改)、已打开文件的状态标记(可以通过fcntl的F_GETFL和F_SETFL进行检索和修改)若打开文件时发生错误,open()将返回-1,错误号errno标识错误原因,可能参的错误如下:

由open和openat函数返回的文件描述符一定是最小的未用的数值,常量_POSIX_NO_TRUNC决定是否要截断过长的文件名或路径名,还是返回一个错误。

出错时open返回-1,错误号errno标识错误原因:

代码示例:

若未指定O_CREAT标记,则可以省略mode参数,即创建文件,必须指定mode设置权限默认值,但是权限,不仅依赖于mode,还受到进程umask和父目录的默认访问控制列表影响:

代码示例:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值