open和fopen的区别
1.来源(最显而易见的区别):
·open是UNIX系统调用函数(包括LINUX等),返回的是文件描述符,他是文件在文件描述符表里的索引。
·fopen是ANSIC标准中的C语言库函数,在不同的系统中应该调用不同的内核API,返回的是一个指向文件结构的指针。
2.移植性
这一点从上面的来源就能推断出,fopen是C标准函数,因此拥有良好的移植性;而‘open’是UNIX系统调用,移植性有限,如windows
下相似的功能使用API函数‘CreateFile’
用open写的在Windows下不能运行,而fopen只要是C语言写的就行
3.适用范围:
·Open返回文件描述符,而文件描述符是UNIX系统下的一个重要概念,UNIX下的一切设备都是以文件的形式操作,如网络套接字,硬件设备等。当然包括操作普通正规文件(Regular File)。
·fopen是用来操作普通正规文件(Regular File)的
4.文件IO层次
·open低级IO fopen 高级IO
5.缓冲:
·fopen有缓冲 执行速度快效率高,如果顺序访问文件,fopen系列函数要比直接调用open系列函数快,如果随机访问则相反
·open没缓冲
标准C库打开创建文件读写文件光标移动
1.fopen原型:FILE fopen(const char *path,const char *mode)
返回值是个FILE 类型的指针:FILE *fp
2.fwrite原型:size_t fwrite (const void *ptr,size_t size,size_t nmembm,FILE *stream);
const void *ptr:缓冲区 size_t size:大小
size_t :个数 FILE *stream:哪个文件
3.size_t fread(void *ptr,size_t size,size_t nmemb,FILE stream)
易错点:fread的缓冲区是readbuf,fread的缓冲区是str
和以前不一样,返回的不是文件描述符
fopen的打开方式:
mode打开模式:r : 只读方式打开一个文本文件
rb:只读方式打开一个二进制文件
w:只写方式打开一个文本文件
wb:只读方式打开一个二进制文件
a:追加方式打开一个文本文件
ab:追加方式打开一个二进制文件
r+:可读可写方式打开一个文本文件
rb+:可读可写方式打开一个二进制文件
w+:可读可写方式创建一个文本文件
wb+:可读可写方式生成一个二进制文件
a+:可读可写追加方式打开一个文本文件
ab+:可读可写方式追加一个二进制文件
和之前的API不同,这节讲的是标准C库的API,但是大体一致
Fwrite那里也可以这么写:fwrite(str,sizeof(char)*strlen(str),1,fp);
图中是一个一个写,这个是一次写完
标准C库写入结构体到文件
1.fread 和fwrite的参数返回值都是size_t
返回值和第二个和第三个参数有关
2.写结构体到文件中
第十六课文件其他函数讲解及文件收尾 (用的不多)
int fputc(int c , FILE *stream); 写一个字符到文件中
feof 判断文件是否到达尾巴,如果没到达,函数返回值是0 。取!反让他非0,里面的条件为真
fgetc 一个字符一个字符的从文件中取出来
int feof(FILE *stream)