详解"/>
【fread/fwrite】C语言API之fread/fwrite函数详解
文章目录
- 1.函数定义及原型
- 2.函数功能
- 3.函数示例
1.函数定义及原型
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
参数说明:
参数 | 说明 |
---|---|
ptr | 读取或写入的数据存放的内存的指针(因为是void型,所以它可以是数组,也可以是新开辟的空间,buffer就是一个索引) |
size | 每次读取或写入的字节数 |
nmemb | 读取或写入的次数 |
stream | 要读取或写入的文件的指针 |
2.函数功能
函数 | 说明 | 备注 |
---|---|---|
fread | 函数 fread() 从 stream 指向的流中读取 nmemb 个数据项,每个 size 字节长,并将它们存储在 ptr 给定的位置。 | Thread safety(线程安全) |
fwrite | 函数 fwrite() 将 nmemb 个数据项(每个 size 字节长)写入 stream 指向的流,从 ptr 给出的位置获取它们。 | Thread safety(线程安全) |
返回值:
- 成功:fread() 和 fwrite() 返回读取或写入的项目数,此数字等于仅当 size 为 1 时传输的字节数;
- 失败:如果发生错误或到达文件末尾,则返回值是一个短项计数(或零)。
扩展:
1.文件读取方式:二进制
方式和字符
方式
2.fread可以读二进制文件,有时用字符方式去读文件不能读完整个文件,因为字符方式用特定的标记结尾的,读取时只要碰到该标记就自动结束。但咱们可以使用二进制方式。
注意:fread() 不区分文件结尾和错误,调用者必须使用 feof(3) 和 ferror(3) 来确定发生了什么!
3.函数示例
//fwrite_fread.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(void)
{FILE *fp;int size = 0;char *freadbuf;char *writebuf = "This is my test about fwrite!\n";fp = fopen("test","rwb+");if(NULL == fp) {printf("Error:Open input.c file fail!\n");return -1;}if(ferror(fp))printf("Error to read the file\n");fseek(fp, 0, SEEK_END);size = ftell(fp);rewind(fp);freadbuf = (char*)malloc(sizeof(char)*size);fread(freadbuf,1,size,fp);printf("%s",freadbuf);printf("Press any key to fwrite:%s",writebuf);fseek(fp, size, SEEK_END);fwrite(writebuf,1,strlen(writebuf),fp);fclose(fp);free(freadbuf);return 0;
}
执行步骤:
vi fwrite_fread.c
gcc fwrite_fread.c -o fwrite_fread
echo 12345678 > test
cat test
./fwrite_fread
cat test
结果如下:
更多推荐
【fread/fwrite】C语言API之fread/fwrite函数详解
发布评论