• 正文
  • 相关推荐
申请入驻 产业图谱

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

2024/10/10
607
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

前面介绍了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和父目录的默认访问控制列表影响:

代码示例:

飞凌嵌入式

飞凌嵌入式

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。

保定飞凌嵌入式技术有限公司,创建于2006年,是一家专注嵌入式核心控制系统研发、设计和生产的高新技术企业,是国内较早专业从事嵌入式技术的企业之一。 经过十几年的发展与积累,公司拥有业内优秀的软硬件研发团队,在北京及保定建立两大研发基地,在苏州、深圳设有华东、华南技术服务中心,并在北美、欧洲以及亚太等其他国家和地区拥有国际业务网络。公司研发的智能设备核心平台广泛应用于物联网、工控、轨道交通、医疗、电力、商业电子、智能家居、安防、机器人、环境监测等诸多领域。收起

查看更多

相关推荐