0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

ElfBoard 2025-12-29 11:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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

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

wKgZO2lR7qGASeBgAAArJfsO2II188.png

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

wKgZPGlR7LaARvqKAAG-czxaBYw828.png

4.3mode

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

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

wKgZO2lR7IaAYy1nAAAb96jqY54202.png

每组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()函数及时关闭文件,避免资源泄漏。希望本篇文章能为各位小伙伴的实际开发带来帮助,如果在操作中遇到任何疑问,欢迎随时交流讨论。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6078

    文章

    45569

    浏览量

    673312
  • 嵌入式
    +关注

    关注

    5209

    文章

    20625

    浏览量

    336759
  • 开发板
    +关注

    关注

    26

    文章

    6405

    浏览量

    120542
  • Open
    +关注

    关注

    0

    文章

    24

    浏览量

    11443
  • RK3588
    +关注

    关注

    8

    文章

    585

    浏览量

    7540
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式教育科普|GPIO接口全面解析

    在现代科技领域,嵌入式系统接口作为信息交互的核心载体,发挥着至关重要的作用,各类接口通过预定义的通信协议与标准化规范,可以实现设备间的精准数据传输与智能控制。 作为
    的头像 发表于 03-05 11:11 3676次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|GPIO<b class='flag-5'>接口</b>全面解析

    嵌入式教育科普|SPI接口全面解析

    在现代科技领域,嵌入式系统接口作为信息交互的核心枢纽,扮演着不可或缺的角色。
    的头像 发表于 03-24 16:45 2662次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|SPI<b class='flag-5'>接口</b>全面解析

    ElfBoard嵌入式教育科普|ADC接口全面解析

    当代信息技术体系中,嵌入式系统接口作为数据交互的核心基础设施,构成了设备互联的神经中枢。基于标准化通信协议与接口规范的技术架构,实现了异构设备间的高效数据交换与智能化协同作业。本文选取
    的头像 发表于 04-30 09:34 2755次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|ADC<b class='flag-5'>接口</b>全面解析

    ElfBoard嵌入式教育科普|CAN接口全面解析

    CAN的全称是Controller Area Network,译为控制器区域网络,是一种用于车辆、电力系统、工业设备等嵌入式系统的半双工异步串行通信协议和物理接口
    的头像 发表于 05-28 16:30 2724次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|CAN<b class='flag-5'>接口</b>全面解析

    [分享资料]嵌入式Linux应用程序开发详解

    Linux的环境搭建,以及嵌入式LinuxI/O与文件系统的开发、进程控制开发、进程间通信开发
    发表于 09-11 23:25

    转:嵌入式Linux应用程序开发详解

    。接着系统地讲解了嵌入式linux的环境搭建,以及嵌入式linuxi
    发表于 06-12 11:11

    ARM嵌入式Linux系统开发详解

    Linux技术的*发展,全部采用当前最流行和稳定的Linux发行版或者相关工具,是Linux爱好者学习Linux的好帮手。《Linux典藏
    发表于 09-14 08:57

    ARM嵌入式Linux系统开发详解

    ARM嵌入式Linux系统开发详解,供大家参考。
    发表于 03-17 14:18 58次下载

    嵌入式Linux应用程序开发详解

    。接着系统地讲解了嵌入式linux的环境搭建,以及嵌入式linuxi
    发表于 06-17 17:24 61次下载

    详解嵌入式linux 启动信息

    详解嵌入式linux 启动信息
    发表于 10-30 10:28 11次下载
    <b class='flag-5'>详解</b><b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b> 启动信息

    (网盘)ARM嵌入式Linux系统开发详解

    (网盘)ARM嵌入式Linux系统开发详解(python嵌入式开发 - csdn博客)-(网盘)ARM
    发表于 08-04 12:35 76次下载
    (网盘)ARM<b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b><b class='flag-5'>系统</b>开发<b class='flag-5'>详解</b>

    嵌入式linux应用程序开发标准教程pdf,嵌入式LINUX应用程序开发标准教程-华清远见.PDF...

    嵌入式LINUX应用程序开发标准教程-华清远见《嵌入式LINUX应用程序开发标准教程》作者:华清远见第6 章 文件I/
    发表于 11-01 16:32 15次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>linux</b>应用程序开发标准教程pdf,<b class='flag-5'>嵌入式</b><b class='flag-5'>LINUX</b>应用程序开发标准教程-华清远见.PDF...

    Linux I/O 接口的类型及处理流程

    Linux I/O 接口 Linux I/O
    的头像 发表于 11-08 16:43 2508次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>接口</b>的类型及处理流程

    嵌入式open函数的使用

    嵌入式系统是指嵌入到其他设备或系统中,用于控制和管理硬件资源的计算机系统。在嵌入式
    的头像 发表于 01-04 15:51 1625次阅读

    ElfBoard嵌入式教育科普|UART接口全面解析

    掌握UART等通信接口的深入知识,对嵌入式初学者而言,不仅能够深化对通信协议与方式的认知,增强调试技巧及通信接口设计能力,还能拓宽应用范畴并培育系统级思考方式。因此本文将对UART
    的头像 发表于 03-10 09:29 2436次阅读
    <b class='flag-5'>ElfBoard</b><b class='flag-5'>嵌入式</b><b class='flag-5'>教育科普</b>|UART<b class='flag-5'>接口</b>全面解析