一,简要概括与open()系列函数的区别:
fopen()系列函数是是标准C语言库函数,因此拥有良好的移植性;
open()系列函数是UNIX系统调用,移植性有限。
详细内容请移驾链接内容:
/NickyYe/p/5497659.html
二,函数头文件:
因为fopen(),fwrite(),fread(),fseek(),fclose()这一系列函数都是标准的C库函数,所以头文件都是:
#include <stdio.h>
三,函数原型:
fopen: FILE *fopen(const char *pathname, const char *mode);
fwrite: size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
fread: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
fseek: int fseek(FILE *stream, long offset, int whence);
fclose: int fclose(FILE *stream);
🔺fopen()参数说明:FILE *fopen(const char *pathname, const char *mode);
① const char *pathname:文件名/路径,这是char型指针,须在”文件名/路径“上加上双引号;
② const char *mode:文件的操作权限,这里也是字符型指针,须在“操作权限”上加双引号;
🔺fwrite()参数说明:size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
①const void *ptr: ptr写入数据后存放地址;
② size_t size:size是的块长度;
③ size_t nmemb: nmemb是块的数量;
④ FILE *stream: 文件流
实际写入长度为size_t nmemb,返回值为块成功写入块的nmemb数量。
🔺fread()参数说明:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
①void *ptr: 读取数据后存放地址
② size_t size:size是块长度
③ size_t nmemb: 是块的数量
④ FILE *stream: 文件流
实际读取长度为size_t nmemb,返回值为块成功读取块的nmemb数量。
🔺fseek()参数说明:int fseek(FILE *stream, long offset, int whence);
① FILE *stream : 文件流;
② long offset: 偏移位数;
③ int whence: 光标位置;
fseek()用法和lseek()的用法基本一样,详情可以参考链接内容:
/m0_74985965/article/details/128626066?spm=1001..3001.5502
🔺fclose()参数说明:int fclose(FILE *stream);
用法:关闭文件,文件操作中必不可少的一步;
FILE *stream:文件流fp
四,代码实现:
① 对字符串进行读写操作;
#include <stdlib.h>#include <string.h>int main(){FILE *fp;char *str = "qwertyuiop";//将字符串在地址str中char *readBuf = NULL;fp = fopen("./file1","w+");fwrite(str,sizeof(char),strlen(str),fp);//参照原型,有两种写法//fwrite(str,sizeof(char)*strlen(str),1,fp);int size = fseek(fp,0,SEEK_END);readBuf = (char *)malloc(sizeof(char)*size);fseek(fp,0,SEEK_SET);fread(readBuf,sizeof(char),strlen(str),fp);//两种写法,意义一样//fread(readBuf,sizeof(char)*strlen(str),1,fp);printf("%s\n",readBuf);fclose(fp);return 0;}
② 对整型数进行读写操作:
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){FILE *fp;int data = 100;int data2 = 0;;fp = fopen("./file1","w+");fwrite(&data,sizeof(int),1,fp);fseek(fp,0,SEEK_SET);fread(&data2,sizeof(int),1,fp);printf("data2=%d\n",data2);fclose(fp);return 0;}
③ 对结构体进行读写操作:
#include <stdio.h>#include <stdlib.h>#include <string.h>struct Test{int a;char c;};int main(){FILE *fp;struct Test data = {100,'h'};struct Test data2;fp = fopen("./file1","w+");fwrite(&data,sizeof(struct Test),1,fp);fseek(fp,0,SEEK_SET);fread(&data2,sizeof(struct Test),1,fp);printf("a=%d,c=%c\n",data2.a,data2.c);fclose(fp);return 0;}
④ 对结构体数组进行读写操作:
#include <stdio.h>#include <stdlib.h>#include <string.h>struct Test{int a;char c;};int main(){FILE *fp;struct Test data[2] ={{100,'h'},{101,'j'}};struct Test data2[2];fp = fopen("./file1","w+");fwrite(&data,sizeof(struct Test)*2,1,fp);fseek(fp,0,SEEK_SET);fread(&data2,sizeof(struct Test)*2,1,fp);printf("a=%d,c=%c\n",data2[0].a,data2[0].c);printf("a=%d,c=%c\n",data2[1].a,data2[1].c);fclose(fp);return 0;}