自学嵌入式day28,文件操作

文件操作函数详解

open函数

复制代码
int open(const char *pathname, int flags, mode_t mode);
  • 参数说明:
    • pathname:文件路径字符串
    • flags:文件打开标志组合
      • 基本模式:O_RDONLY/O_WRONLY/O_RDWR
      • 创建选项:O_CREAT(需配合mode参数)
      • 修改选项:O_TRUNC/O_APPEND
    • mode(创建文件时生效):权限位掩码,如0644
  • 返回值:成功返回文件描述符(≥3),失败返回-1

fopen与open模式对照

fopen模式 open标志组合
"r" O_RDONLY
"w" O_WRONLY|O_CREAT|O_TRUNC
"a" O_WRONLY|O_CREAT|O_APPEND
"r+" O_RDWR
"w+" O_RDWR|O_CREAT|O_TRUNC
"a+" O_RDWR|O_CREAT|O_APPEND

read/write函数

复制代码
ssize_t read(int fd, void *buf, size_t count);
ssize_t write(int fd, const void *buf, size_t count);
  • 公共参数:
    • fd:open返回的文件描述符
    • buf:数据缓冲区指针
    • count:操作字节数
  • 返回值:
    • 成功:实际读写字节数(可能小于count)
    • 0:read到达文件尾/write未写入数据
    • -1:出错(检查errno)

close函数

复制代码
int close(int fd);
  • 必须调用以释放系统资源
  • 返回值:0成功/-1失败

目录操作函数

opendir/readdir/closedir流程

复制代码
DIR *opendir(const char *name);
struct dirent *readdir(DIR *dirp);
int closedir(DIR *dirp);
  • dirent结构关键字段:
    • d_name:文件名字符串
    • d_type:文件类型标识符
  • 典型使用模式:
c 复制代码
DIR *dir = opendir("path");
struct dirent *entry;
while ((entry = readdir(dir)) != NULL) {
    printf("%s\n", entry->d_name);
}
closedir(dir);

Makefile编写规范

基础语法结构

复制代码
target: dependencies
[TAB]command
  • 特殊变量:
    • $@:当前目标名
    • $^:所有依赖文件
    • $<:第一个依赖文件

进阶示例

makefile 复制代码
CC = gcc
CFLAGS = -Wall -g
TARGET = program
SRCS = main.c utils.c

$(TARGET): $(SRCS)
	$(CC) $(CFLAGS) $^ -o $@

clean:
	rm -f $(TARGET)

常用命令

  • 默认编译:make
  • 指定目标:make target_name
  • 清理构建:make clean
  • 调试模式:make --debug
相关推荐
To_OC5 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
2401_841495645 小时前
【操作系统】进程同步与互斥实验报告
c++·算法·操作系统·进程·并发·同步·互斥
Yana.nice5 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
DFT计算杂谈9 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
爱刷碗的苏泓舒9 小时前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
Zhang~Ling10 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind10 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森10 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
XMAIPC_Robot11 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发