文件操作函数详解
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