/ ai资讯

ElfBoard嵌入式教育科普|Linux系统I/O接口:Open函数详解

发布时间:2025-12-29 13:46:23

1.函数概述

open()是 Linux/Unix 内核提供的底层系统调用,核心功能是打开或创建文件。成功调用后,内核会返回一个整型的文件描述符作为该文件的句柄,后续的所有读写操作都基于此描述符进行。调用时需指定访问模式(如O_RDONLY),以决定程序操作文件内容的权限。

2.头文件

使用open()函数前,需要包含以下头文件:

#include #include #include

3.函数原型

int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);

4.参数说明

4.1pathname

表示要打开的文件路径,可以是绝对路径或相对路径。

4.2flags

用于指定文件的打开方式,分为互斥模式和可选标志两类。

互斥模式(必须选择一种):

可选标志(通过位或|与互斥模式组合):

4.3mode

仅在flags包含O_CREAT时有效,用于设置新建文件的权限。

mode_t为32位无符号整数,仅低12位有效,分为四组(共12位):

每组3位分别对应读(r=4)、写(w=2)、执行(x=1)权限。

例如0644表示用户可读写,组用户和其他用户只可读。

5.返回值

成功:返回文件描述符(非负整数)

失败:返回-1

6.实战示例

下面通过一个具体的例子展示如何以不同方式打开文件,并输出对应的文件描述符。

6.1创建代码文件

在/home/elf/work目录下新建open.c文件,内容如下:

#include #include #include #include int main() { // 只读打开,不存在则创建,权限 644 int fd1 = open("./test1", O_RDONLY | O_CREAT, 0644); // 只读打开,若存在则清空,权限 644 int fd2 = open("./test2", O_RDONLY | O_CREAT | O_TRUNC, 0644); // 读写打开,不存在则创建,权限 664 int fd3 = open("./test3", O_RDWR | O_CREAT, 0664); // 读写打开,若存在则清空,权限 666 int fd4 = open("./test4", O_RDWR | O_CREAT | O_TRUNC, 0666); printf("fd1: %d\n", fd1); printf("fd2: %d\n", fd2); printf("fd3: %d\n", fd3); printf("fd4: %d\n", fd4); return 0; }

6.2编译与运行

elf@ubuntu:~/work$ gcc open.c -o open elf@ubuntu:~/work$ ./open

7.运行结果

程序运行后,输出如下:

fd1: 3 fd2: 4 fd3: 5 fd4: 6

说明:文件描述符从3开始分配,因为0、1、2通常被系统预留给标准输入(stdin)、标准输出(stdout)和标准错误(stderr)。

8.总结

open()是Linux系统I/O操作的基础函数,通过灵活组合flags参数可实现多种文件打开方式。理解并正确使用open()是进行文件操作、进程间通信和系统编程的重要前提。在实际开发中,应注意错误处理,并确保在不再需要文件描述符时使用 close()函数及时关闭文件,避免资源泄漏。希望本篇文章能为各位小伙伴的实际开发带来帮助,如果在操作中遇到任何疑问,欢迎随时交流讨论。

  • 单片机 单片机 关注

    关注

    6074

    文章

    45387

    浏览量

    665224
  • 嵌入式 嵌入式 关注

    关注

    5191

    文章

    20208

    浏览量

    330137

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com