题目
解释文件系统的基本操作:创建、读取、写入和删除文件
信息
- 类型:问答
- 难度:⭐
考点
文件系统基本概念,文件操作API,文件路径处理
快速回答
文件系统核心操作包括:
- 创建文件:使用类似
open()的 API 并指定创建标志 - 读取文件:通过
read()函数获取文件内容 - 写入文件:使用
write()函数修改内容 - 删除文件:调用
unlink()或remove()删除文件
操作时需注意:文件路径处理、错误检查、资源释放。
解析
1. 核心操作原理
文件系统通过系统调用提供基础操作:
- 创建文件:内核分配 inode 和磁盘空间,目录添加新条目
- 读取/写入:通过文件描述符定位数据块,缓冲机制加速访问
- 删除文件:减少链接计数,空间标记为可重用(实际数据未立即擦除)
2. 代码示例(POSIX 标准)
// 创建文件(O_CREAT | O_WRONLY 标志)
int fd = open("/path/to/file.txt", O_CREAT | O_WRONLY, 0644);
// 写入数据
char data[] = "Hello OS";
write(fd, data, sizeof(data));
// 重新打开读取(O_RDONLY 标志)
fd = open("/path/to/file.txt", O_RDONLY);
char buffer[50];
read(fd, buffer, sizeof(buffer));
// 删除文件
unlink("/path/to/file.txt");
close(fd); // 必须关闭文件描述符!3. 最佳实践
- 错误处理:检查所有系统调用的返回值(如
open()返回 -1 表示失败) - 资源释放:操作后必须调用
close()避免文件描述符泄漏 - 路径安全:避免使用相对路径(如
../),防止目录遍历攻击 - 权限控制:创建文件时设置合适权限(如 0644 表示用户可读写,其他只读)
4. 常见错误
- 未检查返回值导致静默失败
- 忘记关闭文件描述符(资源泄漏)
- 并发访问冲突(多进程同时写同一文件)
- 误删文件(
unlink()后数据不可恢复) - 路径拼写错误(如缺少斜杠
/path/tovs/path/to/)
5. 扩展知识
- 文件描述符:内核维护的打开文件引用,每个进程独立
- inode:存储文件元数据(大小、权限、位置等)
- 硬链接 vs 软链接:硬链接直接指向 inode,软链接是独立路径文件
- 原子操作:
O_EXCL标志确保文件创建的唯一性