news 2026/9/30 8:54:47

嵌入式第三十三篇——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/9/30 0:41:12

OneMore插件:让OneNote效率提升10倍的神器

OneMore插件&#xff1a;让OneNote效率提升10倍的神器 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore OneMore是一个功能强大的OneNote开源插件&#xff0c;通过160多…

作者头像 李华
网站建设 2026/9/30 11:48:25

终极指南:快速上手轻量级文本转语音引擎eSpeak NG

在当今数字化时代&#xff0c;文本转语音技术正变得越来越重要。eSpeak NG作为一款开源的语音合成引擎&#xff0c;为开发者提供了一个免费、跨平台的解决方案。这款轻量级TTS工具不仅支持多种语言&#xff0c;还具备出色的性能和易用性。 【免费下载链接】espeak-ng espeak-ng…

作者头像 李华
网站建设 2026/10/1 5:43:26

云顶之弈智能挂机助手:解放双手的自动化游戏神器

云顶之弈智能挂机助手&#xff1a;解放双手的自动化游戏神器 【免费下载链接】LOL-Yun-Ding-Zhi-Yi 英雄联盟 云顶之弈 全自动挂机刷经验程序 外挂 脚本 ,下载慢可以到https://gitee.com/stringify/LOL-Yun-Ding-Zhi-Yi 项目地址: https://gitcode.com/gh_mirrors/lo/LOL-Yun…

作者头像 李华
网站建设 2026/10/1 3:17:29

图像分割标注转换:从入门到精通的全方位指南

图像分割标注转换&#xff1a;从入门到精通的全方位指南 【免费下载链接】ultralytics ultralytics - 提供 YOLOv8 模型&#xff0c;用于目标检测、图像分割、姿态估计和图像分类&#xff0c;适合机器学习和计算机视觉领域的开发者。 项目地址: https://gitcode.com/GitHub_T…

作者头像 李华
网站建设 2026/9/30 21:10:00

3步精通Draw.io Mermaid插件:小白也能快速上手的文本转图表神器

3步精通Draw.io Mermaid插件&#xff1a;小白也能快速上手的文本转图表神器 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin Draw.io Mermaid插件让文本生成图表变得前所…

作者头像 李华
网站建设 2026/9/30 8:00:02

12.14周报

目录 摘要 1.什么是机器学习&#xff1f; 2.有监督学习和无监督学习的区别 3.什么是过拟合、欠拟合&#xff1f;怎么解决&#xff1f; 4.分类问题和回归问题的区别 5.怎么做异常检测&#xff1f;其目标函数是什么&#xff1f;与有监督学习的 区别是什么&#xff1f; 6. …

作者头像 李华