2026/6/9 17:24:53
网站建设
项目流程
网站建设全网推广,建设网站平台合同范本,品牌网站定制,华辰合肥企业展厅设计公司文件I/O和目录操作一、系统调用与C库函数1. 系统调用 (File I/O)操作系统提供的底层接口直接访问内核功能功能强大#xff0c;但平台相关对设备文件操作更高效2. C库函数 (Standard I/O)C标准库提供的高级接口跨平台#xff0c;通用性好带缓冲机制#xff0c;适合非设备文件…文件I/O和目录操作一、系统调用与C库函数1. 系统调用 (File I/O)操作系统提供的底层接口直接访问内核功能功能强大但平台相关对设备文件操作更高效2. C库函数 (Standard I/O)C标准库提供的高级接口跨平台通用性好带缓冲机制适合非设备文件底层调用系统调用函数二、文件操作对比特性标准I/O文件I/O接口类型C库函数系统调用文件标识FILE* 文件流指针int 文件描述符缓冲机制带缓冲区无缓冲区移植性高跨平台低平台相关适合场景普通文件设备文件三、文件I/O操作步骤1. 打开文件 -open()#include fcntl.h #include unistd.h int open(const char *pathname, int flags, int mode);功能: 获得一个文件描述符参数:pathname: 文件名flags:O_RDONLY: 只读O_WRONLY: 只写O_RDWR: 读写O_CREAT: 创建文件O_TRUNC: 清空文件内容O_APPEND: 追加模式mode: 文件权限创建文件时需要返回值:成功: 返回文件描述符非负整数失败: 返回-12. 读取文件 -read()#include unistd.h ssize_t read(int fd, void *buf, size_t count);功能: 从文件读取数据参数:fd: 文件描述符buf: 接收数据的缓冲区指针count: 最大读取字节数返回值:0: 实际读取的字节数0: 文件结束0: 错误3. 写入文件 -write()#include unistd.h ssize_t write(int fd, const void *buf, size_t count);功能: 向文件写入数据参数:fd: 文件描述符buf: 要写入的数据指针count: 写入数据的长度返回值:0: 实际写入的字节数0: 无数据写入某些设备0: 错误4. 关闭文件 -close()#include unistd.h int close(int fd);功能: 关闭文件描述符参数:fd: 文件描述符返回值:成功: 返回0失败: 返回-1四、目录操作步骤1. 打开目录 -opendir()#include dirent.h #include sys/types.h DIR *opendir(const char *name);功能: 打开目录获得目录流指针参数:name: 目录名返回值:成功: 返回目录流指针失败: 返回NULL2. 读取目录 -readdir()#include dirent.h struct dirent *readdir(DIR *dirp);功能: 读取目录中的文件信息参数:dirp: 目录流指针返回值:成功: 返回文件信息结构体指针失败或结束: 返回NULLdirent结构体:struct dirent { ino_t d_ino; // 索引节点号 off_t d_off; // 目录文件中的偏移 unsigned short d_reclen; // 记录长度 unsigned char d_type; // 文件类型 char d_name[256]; // 文件名 };文件类型常量:DT_DIR: 目录文件DT_REG: 普通文件DT_LNK: 链接文件DT_CHR: 字符设备DT_BLK: 块设备DT_FIFO: 管道DT_SOCK: 套接字3. 关闭目录 -closedir()#include dirent.h int closedir(DIR *dirp);功能: 关闭目录流参数:dirp: 目录流指针返回值:成功: 返回0失败: 返回-1五、重要概念总结1. 文件描述符非负整数表示打开的文件0: 标准输入(stdin)1: 标准输出(stdout)2: 标准错误(stderr)其他: 用户打开的文件2. 缓冲机制标准I/O: 带缓冲区减少系统调用次数文件I/O: 无缓冲区直接读写3. 错误处理所有系统调用失败返回-1使用perror()打印错误信息使用errno获取错误码4. 文件权限创建文件时需要指定权限常用权限0644: 用户读写组和其他只读0755: 用户读写执行组和其他读执行六、使用建议普通文件操作: 优先使用标准I/O更高效设备文件操作: 使用文件I/O更直接错误检查: 每次调用后都要检查返回值资源释放: 使用完后及时关闭文件/目录描述符路径处理: 使用相对路径或绝对路径注意权限