大兴网站建设推广,wordpress程序增大,在济南什么人想做网站,专业建设规划目标与标准open 系列API 和 fopen系列API的区别
1.来源: -open 是UNIX系统调用函数(包括LINUX系统)#xff0c;返回的是文件描述符 -fopen是ANSIC标准的C语言库函数#xff0c;在不同系统重调用不同内核的API
2.移植性: fopen 是C标准函数#xff0c;具有良好的移植性#xff1b; 而…
open 系列API 和 fopen系列API的区别
1.来源: -open 是UNIX系统调用函数(包括LINUX系统)返回的是文件描述符 -fopen是ANSIC标准的C语言库函数在不同系统重调用不同内核的API
2.移植性: fopen 是C标准函数具有良好的移植性 而opne是unix系统调用移植性有限(砸死window下运行怒了可以用功能一样的CreateFile调用)
3.适用范围: open返回文件操作符在unix系统下使用可以硬件设备对接 fopen 用来操作普通正规文件
4.文件IO层次: open里系统内核更接近属于低级文件IO运行在内核态高级文件IO运行在用户态(缓冲区)
5.缓冲: fopen --缓冲文件系统设置文件结构体指针 等一堆f开头的api都是在缓冲区运行 -- 执行速度快效率高。 open --非缓冲文件系统无文件结构体指针值读写二进制文件效率高速度快 总结: open 无缓冲fopen有缓冲
由于fopen渔鸥缓冲减少了用户态和内存太的切换而open每次都需要切换 if 顺序访问文件的话fopen的效率更高随机访问的话计算open的效率高 fopen系列API调用: fopen
FILE *fopen(char *filename,char *mode); #includestdio.h #includestring.h int main() { FILE * fp; char *strmxjun hen shuai!; char readBuf[128]{0}; fpfopen(./mxj.txt,w); fwrite(str,sizeof(char),strlen(str),fp); fwrite(str,sizeof(char)*strlen(str),1,fp); fseek(fp,0,SEEK_SET); //size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); fread(readBuf,sizeof(char),strlen(str),fp); printf(read data:%s\n,readBuf); fclose(fp); return 0; } 标准C库结构体写入文件:
//读写返回值的区别: 指定 写的个个数 实际 接收到的个数返回值是大值(不够写了\0补充) 而指定读的个数更大返回值只能是小者算指定最大读取数 #includestdio.h #includestring.h struct Test { int a; char b; }; int main() { FILE * fp; struct Test data {100,a};\ struct Test data2; fpfopen(./mxj.txt,w); fwrite(data,sizeof(struct Test),1,fp); fseek(fp,0,SEEK_SET); //size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); fread(data2,sizeof(struct Test),1,fp); printf(read data2:%d %c\n,data2.a,data2.b); fclose(fp); return 0; } fputc() -- 一次将一个字符的写入文件 函数原型: int fputc(int c, FILE *stream); #include stdio.h #includestring.h int main() { FILE *fp; int i; char *strmxjun giegie!!!; int lenstrlen(str); fp fopen(./stest.txt, w); for(i0;ilen;i) { fputc(*str,fp); str; } fclose(fp); return 0; } feof() fgetc() feof() -- 判断是否到文件尾巴 --到尾巴返回0
fgetc() --读取文件字节 #include stdio.h #includestring.h int main() { FILE *fp; int i; char c; fp fopen(./stest.txt, r); while(!feof(fp)){ cfgetc(fp); printf(%c,c); } fclose(fp); return 0; }