02文件io 函数用法

本文主要介绍了Linux系统下的文件操作函数,包括打开、关闭、读取、写入和定位文件。详细说明了各函数的参数和返回值,如open函数用于打开文件,可指定打开方式和权限;read和write函数用于读写文件;lseek函数用于定位文件位置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在指定位置打开一个文件 int open(const char *path,int oflag,…);
成功时返回文件描述符,错误EOF
示例 open(“1.txt”,O_WRONLY|O_CREAT|TRUNC,0666)
以只写方式打开1.txt,不存在创建,存在清空
path 文件路径
oflag 打开方式
O_RDONLY 只读方式打开文件
O_WRONLY 可写方式打开文件
O_RDWR 读写方式打开文件
O_CREAT 如果文件不存在,创建文件,用第三个参数设置文件权限
O_EXCL 文件存在,返回错误,用来测试文件是否存在
O_TRUNC 文件已经存在,先删除原有文件数据
O_APPEND 以添加方式打开文件
第三个参数为文件存取权限,用八进制表示法,也可以不写这个参数
文件的权限为 mode &(~umask)
B111 111 111& ~(B 000 010 010) = B 111 101 101

2.关闭文件 int close(int fd);
成功返回0;出错EOF

3.读取文件 ssize_t read(int fd,void *buf,size_t count);
成功时返回实际读取的字节数,如果在调read函数之前已是文件末尾,则返回0,错误EOF
fd 文件描述符
buf 读取的数据保存在缓冲区buf中
count 请求读取的字节数

4.写入文件 ssize_t write(int fd,void *buf,size_t count);
成功时返回实际写入的字节数,出错EOF
write()会把参数buf 所指的内存写入count 个字节到参数fd 所指的文件内
fd 文件描述符
buf 写入的数据保存在缓冲区buf中
count 请求写入的字节数

5.定位文件 off_t lseek(int fd,off_t offset,int whence);
成功返回当前文件读写位置,错误EOF
示例 lseek(int fildes, 0, SEEK_END);
stream 流指针
offset 偏移量,可正可负
whence 基准点 ,参数: SEEK_SET/SEEK_CUR/SEEK_END //开始/当前位置/末尾
SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2

目录的先不写了,不知道什么时候用。。。。。。。

<think>好的,用户想了解文件IO函数的使用方法,并希望有示例代码。首先,我需要确定用户使用的编程语言。根据提供的引用内容,用户提到了C/C++的stdio.h头文件和FILE结构体,以及open函数,这应该是指C语言中的文件操作。所以,我应该重点介绍C语言的文件IO函数。 接下来,我需要整理基本的文件操作流程:打开、读写、关闭。用户可能需要知道如何打开文件,不同的模式(如读、写、追加),以及如何读写内容。同时,用户提到权限问题,比如在打开文件时需要赋予写权限,否则写入失败,这也是需要注意的点。 然后,考虑示例代码部分。需要分别展示fopen、fread/fwrite、fgets/fputs、fscanf/fprintf的使用方法。每个示例应该简洁明了,附带注释说明。例如,写入文件时使用fopen的"w"模式,读取时用"r",追加用"a"。还要注意错误处理,比如检查文件指针是否为NULL。 另外,用户可能对文本模式和二进制模式的区别不太清楚,需要简要说明。比如,使用"wb"或"rb"来处理二进制文件,比如图片或视频。 最后,生成相关问题,帮助用户进一步学习。可能的问题包括不同模式的区别、错误处理的最佳实践、二进制文件操作,以及C与C++在文件IO上的差异。 需要确保引用的内容正确对应,比如引用[3]提到FILE结构体和fopen,引用[4]提到权限问题,这些都要在适当的地方标注引用标识。同时,保持回答结构清晰,分步骤讲解,让用户能够逐步理解和应用。</think>### 文件IO函数使用方法及示例代码 文件IO(输入输出)函数是操作文件系统的核心工具,主要用于文件的创建、读写、关闭等操作。以下是C语言中文件IO函数的使用方法及示例: --- #### 一、基本流程与函数说明 1. **打开文件** 使用`fopen`函数,需指定文件路径和打开模式: ```c FILE *fopen(const char *filename, const char *mode); ``` 常用模式: - `"r"`:只读(文件必须存在) - `"w"`:只写(创建新文件或清空已有文件) - `"a"`:追加(在文件末尾添加内容) - `"r+"`:读写(文件必须存在) - `"w+"`:读写(创建新文件或清空已有文件)[^3] 2. **读写文件** - 文本读写:`fprintf`、`fscanf`、`fgets`、`fputs` - 二进制读写:`fread`、`fwrite` 3. **关闭文件** 使用`fclose`释放资源: ```c int fclose(FILE *stream); ``` --- #### 二、示例代码 ##### 示例1:写入文本文件 ```c #include <stdio.h> int main() { FILE *fp = fopen("test.txt", "w"); // 以写入模式打开文件 if (fp == NULL) { perror("文件打开失败"); return 1; } fprintf(fp, "Hello, World!\n"); // 写入格式化文本 fputs("第二行内容\n", fp); // 写入字符串 fclose(fp); // 关闭文件 return 0; } ``` ##### 示例2:读取文本文件 ```c #include <stdio.h> int main() { FILE *fp = fopen("test.txt", "r"); // 以只读模式打开文件 if (fp == NULL) { perror("文件打开失败"); return 1; } char buffer[100]; while (fgets(buffer, sizeof(buffer), fp) != NULL) { // 逐行读取 printf("%s", buffer); } fclose(fp); return 0; } ``` ##### 示例3:二进制文件操作(写入结构体) ```c #include <stdio.h> struct Student { int id; char name[20]; }; int main() { FILE *fp = fopen("data.bin", "wb"); // 二进制写入模式 if (fp == NULL) { perror("文件打开失败"); return 1; } struct Student s = {1, "Alice"}; fwrite(&s, sizeof(struct Student), 1, fp); // 写入结构体数据 fclose(fp); return 0; } ``` ##### 示例4:追加内容到文件 ```c FILE *fp = fopen("log.txt", "a"); // 追加模式 fprintf(fp, "[日志] 新事件发生\n"); fclose(fp); ``` --- #### 三、注意事项 1. **权限检查** 若以`"w"`或`"a"`模式打开文件,需确保文件路径有写权限,否则操作失败[^4]。 2. **错误处理** 每次操作后检查返回值,例如`fopen`返回`NULL`表示失败。 3. **二进制与文本模式区别** 在Windows系统中,文本模式会自动转换换行符(`\n` → `\r\n`),而二进制模式不会[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值