嵌入式第三十三篇——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函数

函数原型:

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

读取文件:read函数

函数原型:

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

写入文件:write函数

函数原型:

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

关闭文件:close函数

函数原型:

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

三、目录操作扩展

打开目录:opendir函数

函数原型:

c 复制代码
DIR *opendir(const char *name);
  • 返回目录流指针DIR*。

读取目录:readdir函数

函数原型:

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

关闭目录:closedir函数

函数原型:

c 复制代码
int closedir(DIR *dirp);
  • 释放目录流资源。

四、Makefile工程编译工具

基本规则

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

常用变量

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

示例

makefile 复制代码
SRC = main.c func.c
APP = a.out
FLAG = -g -Wall

$(APP): $(SRC)
    gcc $^ -o $@ $(FLAG)

clean:
    rm -f $(APP)
相关推荐
不像程序员的程序媛5 小时前
linux常见文本操作命令
linux·运维·服务器
xier_ran6 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
wangbing11256 小时前
开发指南149-IotDB-常用命令
linux·运维·iotdb
看着博客敲代码6 小时前
WorkBuddy 接上 Kali MCP 做自动化渗透:信息收集到初步验证的落地记录
linux·人工智能·安全·网络安全·自动化
小HANN8 小时前
华为云企业网站上云实战|从零搭建高可用WordPress全站架构(ECS+RDS+ELB+弹性伸缩+云监控闭环)
linux·运维·服务器·经验分享
li星野8 小时前
5 TYPES OF ADVERBS — One-Page Notes
学习
星恒随风8 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
罗西的思考8 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (7)— 混合机制
笔记·学习
GeW8 小时前
2026新质生产力路线图:Linux、数据库与智能算力融合报告
linux
AR-26710-8 小时前
Linux Day19——日志轮转
linux·运维