查看: 969|回复: 0

[经验] 飞凌嵌入式ElfBoard ELF 1板卡-通用文件I/O模型之open

[复制链接]

该用户从未签到

发表于 2024-10-10 09:14:53 | 显示全部楼层 |阅读模式
分享到:
前面介绍了linux系统一切皆文件的概念,系统使用一套系统调用函数open()、read()、write()、close()等可以对所有文件执行I/O操作。应用程序发起的I/O请求,内核会将其转化为相应的文件系统操作,或者设备驱动程序操作。接下来我们一起了解一下open()函数。
open()函数可以打开一个已有文件或创建并打开文件,同时返回文件描述符。函数原型如下:
2-1.png
pathname指定要打开的文件;
flags为打开文件的标志位,控制打开方式;
mode为可选参数,用于指定新创建文件的权限模式。
如果指定的文件不存在,则可以通过在flags中指定O_CREAT,然后open()即可创建。flags参数包含的标志及含义如下表,多个标志可用运算符“|”合并到一起。其中标志参数必须包含O_RDONLY、O_WRONLY、O_RDWR中的一种访问方式。
oflag必须指定下面其中一个:
2-2.png
下面是可选选项:
2-3.png
这些常量可分为三组:文件访问模式标记(可以通过fcntl的F_GETFL进行检索)、文件创建标记(不可以通过fcntl的F_GETFL进行检索或修改)、已打开文件的状态标记(可以通过fcntl的F_GETFL和F_SETFL进行检索和修改)若打开文件时发生错误,open()将返回-1,错误号errno标识错误原因,可能参的错误如下:
由open和openat函数返回的文件描述符一定是最小的未用的数值,常量_POSIX_NO_TRUNC决定是否要截断过长的文件名或路径名,还是返回一个错误。
出错时open返回-1,错误号errno标识错误原因:
2-4.png
代码示例:
2-5.png
若未指定O_CREAT标记,则可以省略mode参数,即创建文件,必须指定mode设置权限默认值,但是权限,不仅依赖于mode,还受到进程umask和父目录的默认访问控制列表影响:
2-6.png
代码示例:
2-7.png

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-12-19 00:15 , Processed in 0.142484 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.