news 2026/10/12 12:59:59

嵌入式第三十三篇——linux系统编程——文件IO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
嵌入式第三十三篇——linux系统编程——文件IO

一、文件IO与标准IO的核心区分

文件IO和标准IO在文件操作方式上存在显著差异,主要体现在设计目标、底层实现和使用场景上:

核心标识
文件IO使用文件描述符(int类型,如0/1/2对应标准输入/输出/错误),标准IO使用文件流指针(FILE*类型)。

缓存机制
文件IO直接与内核交互,无缓存;标准IO在用户态提供缓存,减少系统调用次数。

底层实现
文件IO基于操作系统内核的系统调用(如open/read/write),标准IO封装文件IO的C库函数(如fopen/fread/fwrite)。

跨平台性
文件IO依赖操作系统(如Linux与Windows API不兼容),标准IO遵循C标准(如ANSI C),具有跨平台性。

适用场景
文件IO适用于设备文件(如串口、网卡)或实时性要求高的场景;标准IO适合普通磁盘文件操作,注重代码可移植性。

二、文件IO的核心操作(Linux系统)

打开文件:open函数
函数原型:

int open(const char *pathname, int flags, mode_t mode);
  • pathname:文件路径(如"./test.txt")。
  • flags:打开模式(必选如O_RDONLY,可选如O_CREAT)。
  • mode:文件权限(如0644,八进制格式)。

读取文件:read函数
函数原型:

ssize_t read(int fd, void *buf, size_t count);
  • fd:文件描述符。
  • buf:数据缓冲区。
  • count:期望读取的最大字节数。

写入文件:write函数
函数原型:

ssize_t write(int fd, const void *buf, size_t count);
  • fd:文件描述符。
  • buf:待写入数据缓冲区。
  • count:待写入数据字节数。

关闭文件:close函数
函数原型:

int close(int fd);
  • 必须显式调用以避免文件描述符泄漏。

三、目录操作扩展

打开目录:opendir函数
函数原型:

DIR *opendir(const char *name);
  • 返回目录流指针DIR*。

读取目录:readdir函数
函数原型:

struct dirent *readdir(DIR *dirp);
  • 返回struct dirent结构体,包含文件名d_name等信息。

关闭目录:closedir函数
函数原型:

int closedir(DIR *dirp);
  • 释放目录流资源。

四、Makefile工程编译工具

基本规则

目标:依赖文件 <TAB>编译命令
  • 目标:如可执行文件a.out。
  • 依赖文件:如.c源文件。
  • 命令:如gcc编译指令。

常用变量

  • $^:所有依赖文件。
  • $@:目标文件。
  • $<:第一个依赖文件。

示例

SRC = main.c func.c APP = a.out FLAG = -g -Wall $(APP): $(SRC) gcc $^ -o $@ $(FLAG) clean: rm -f $(APP)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/12 18:44:27

Java-196 消息队列选型:RabbitMQ vs RocketMQ vs Kafka

TL;DR 场景&#xff1a;存量 IBM MQ/老系统并存&#xff0c;新系统要开源、可运维、可扩展且满足一致性与可靠性结论&#xff1a;RabbitMQ 适合“可靠优先的业务解耦”&#xff0c;RocketMQ 适合“交易/事务/顺序消息”&#xff0c;Kafka 适合“数据管道/日志/流式处理”产出&…

作者头像 李华
网站建设 2026/10/12 17:48:27

PiKVM硬件选型指南:从入门到专业部署的完整方案

PiKVM硬件选型指南&#xff1a;从入门到专业部署的完整方案 【免费下载链接】pikvm Open and inexpensive DIY IP-KVM based on Raspberry Pi 项目地址: https://gitcode.com/gh_mirrors/pi/pikvm 在远程服务器管理和数据中心运维领域&#xff0c;PiKVM凭借其开源特性和…

作者头像 李华
网站建设 2026/10/12 22:05:12

wvp-GB28181-pro国标视频平台:从入门到精通的全方位指南

wvp-GB28181-pro国标视频平台&#xff1a;从入门到精通的全方位指南 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 引言&#xff1a;开启国标视频监控新时代 在当今数字化转型浪潮中&#xff0c;视频监控系统已…

作者头像 李华
网站建设 2026/10/12 21:31:36

iStore终极指南:OpenWRT插件中心快速安装与高效管理

iStore终极指南&#xff1a;OpenWRT插件中心快速安装与高效管理 【免费下载链接】istore 一个 Openwrt 标准的软件中心&#xff0c;纯脚本实现&#xff0c;只依赖Openwrt标准组件。支持其它固件开发者集成到自己的固件里面。更方便入门用户搜索安装插件。The iStore is a app s…

作者头像 李华
网站建设 2026/10/12 18:22:26

VC++运行库终极解决方案:告别DLL缺失错误的完整指南

VC运行库终极解决方案&#xff1a;告别DLL缺失错误的完整指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况&#xff1a;下载了一个…

作者头像 李华
网站建设 2026/10/13 2:14:00

【单片机】如何理解GPIO的配置寄存器?

下面把 5 组“藏在幕后”的寄存器一口气讲透&#xff0c;用“装修房子”来打比方&#xff0c;保证看完就能在代码里一眼认出它们的小动作。-------------------------------------------------- 1. CRL / CRH —— “户型图装修许可证” - 每 4 bit 管一只引脚&#xff0c;32…

作者头像 李华