Linux嵌入式开发中的基本文件操作函数open函数的介绍

在Linux嵌入式开发中,一切皆是文件,对于这句话的理解,详情见 https://blog.youkuaiyun.com/wenhao_ir/article/details/144488246

既然一切都是文件,那么就很有必须掌握文件操作的基本函数。

open()函数

请详细介绍下Linux嵌入式开发中的open函数。
答:
open 函数是 Linux 系统编程中用于打开文件或设备的一个重要系统调用。它在嵌入式开发中同样有广泛的应用,特别是在操作文件、设备文件、管道或特殊设备时。


open 函数的功能

open 函数用于打开文件(或创建文件),返回一个文件描述符(file descriptor,简称 FD),它是后续文件操作(如读写)所需的关键句柄。关于文件描述符的作用,请见我的另一篇博文 https://blog.youkuaiyun.com/wenhao_ir/article/details/144918793


函数原型

在头文件 <fcntl.h> 中声明:

#include <fcntl.h>

int open(const char *pathname, int flags, ...);
参数说明
  1. pathname
    要打开的文件或设备文件的路径(可以是绝对路径或相对路径)。

    关于参数pathname前面有个const声明的作用,见博文:
    C语言中,const 关键字的本质作用是什么?const char *point1、char *const point2、const char *const point3的区别是什么?

  2. flags
    指定打开文件的方式和行为。该参数是一个或多个标志的组合,用 按位或 (|) 操作符连接。

    • 访问模式(必选,互斥):
      • O_RDONLY:只读模式打开文件。
      • O_WRONLY:只写模式打开文件。
      • O_RDWR:读写模式打开文件。
    • 附加标志
      • O_CREAT:如果文件不存在则创建文件(需配合第三个参数 mode)。
      • O_EXCL:与 O_CREAT 一起使用,表示文件已存在时返回错误。
      • O_TRUNC:打开文件时清空其内容(通常与写相关的模式一起使用)。
      • O_APPEND:以追加模式打开文件,写入的数据追加到文件末尾。
      • O_NONBLOCK:以非阻塞模式打开文件(常用于设备文件)。
      • O_SYNC:每次写操作都会立即同步到磁盘。
      • O_NOCTTY:如果路径是终端设备,打开时不会成为该设备的控制终端。
  3. mode(可选,针对 O_CREAT 标志)
    指定新创建文件的权限掩码(octal 值),例如:

    • S_IRUSR(用户可读)
    • S_IWUSR(用户可写)
    • S_IXUSR(用户可执行)

    一般组合方式为八进制,如 0664 表示用户可读写,组用户和其他用户可读。


返回值


常见用法示例

1. 打开文件进行只读操作
int fd = open("test.txt", O_RDONLY);
if (fd == -1) {
    perror("Error opening file");
    return -1;
}
2. 创建并打开文件
int fd = open("newfile.txt", O_WRONLY | O_CREAT, 0644);
if (fd == -1) {
    perror("Error creating file");
    return -1;
}
3. 打开设备文件
int fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd == -1) {
    perror("Error opening device");
    return -1;
}

嵌入式开发中的典型场景

  1. 访问设备文件
    嵌入式系统中,许多硬件通过设备文件(如 /dev)映射。通过 open 函数,可以访问这些设备以读取或写入数据。

    • 打开串口设备:/dev/ttyS*
    • 操作 GPIO:通常通过 /sys/class/gpio
  2. 文件系统管理
    在嵌入式系统中操作文件(如配置文件、日志文件)也依赖 open

  3. 管道与通信
    通过 open 操作命名管道(FIFO)或套接字文件,实现进程间通信。

  4. 特定文件系统访问
    如 NFS、YAFFS 或 EXT 文件系统的文件访问。


注意事项

  1. 权限和安全性
    使用 O_CREAT 创建文件时,需注意设置合理的 mode 掩码,以防止权限过宽。

  2. 文件描述符管理
    每次成功调用 open,系统分配一个文件描述符,使用完毕后需通过 close 释放资源。

  3. 非阻塞与同步
    对设备文件使用非阻塞模式时,需结合 pollselect 处理读写操作。

  4. 错误处理
    常见的错误包括:

    • EACCES:无权限访问。
    • ENOENT:文件不存在(未使用 O_CREAT)。
    • EEXIST:文件已存在但使用了 O_EXCL

通过正确使用 open 函数,可以灵活地管理文件和设备操作,满足嵌入式开发的多种需求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昊虹AI笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值