1.引入
Linux文件编程前两篇文章中对文件进行操作,都是使用open、read、write、close等函数。但我们知道fopen、fread等函数,同样可以对文件进行操作。那么两者间有什么区别呢?
以open与fopen为例:
open属于Unix/Linux下底层系统调用函数,不可移植
fopen属于标准C库函数,可移植
open返回文件描述符
fopen返回文件指针
open系列函数属于非缓冲文件系统
fopen系列函数属于缓冲文件系统
fopen一般用于打开普通文件,open用于打开设备文件,例如进程间通信用的管道、驱动等
open是在内核中处理,相比fopen对内核的依赖更高
多数情况还是使用open系列函数
以上为个人学习后的见解,有缺漏和错误的地方还请大家指教!
2.fopen
函数原型:
参数说明:
path:要打开的文件名称。
mode:文件访问方式
r 以只读方式打开文件,该文件必须存在。
r+ 以读/写方式打开文件,该文件必须存在。
rb+ 以读/写方式打开一个二进制文件,只允许读/写数据。
rt+ 以读/写方式打开一个文本文件,允许读和写。
w 打开只写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
w+ 打开可读/写文件,若文件存在则文件长度清为零,即该文件内容会消失;若文件不存在则创建该文件。
a 以附加的方式打开只写文件。若文件不存在,则会创建该文件;如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF 符保留)。
a+ 以附加方式打开可读/写的文件。若文件不存在,则会创建该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(EOF符不保留)。
wb 以只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 以读/写方式打开或新建一个二进制文件,允许读和写。
wt+ 以读/写方式打开或新建一个文本文件,允许读和写。
at+ 以读/写方式打开一个文本文件,允许读或在文本末追加数据。
ab+ 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。
返回值:
成功打开,返回指向该流的文件指针
打开失败,返回 NULL,并把错误代码存在error中
3.fread与fwrite
函数原型:
参数说明:
ptr:指向要写入/读取的数组的指针
size:每个对象的大小
nmemb:写入/读取次数
stream:指向 FILE 的指针
返回值:
fread:
返回实际读取的数据块数目
fwrite:
返回实际写入的数据块数目
4.fseek
函数原型:
参数说明:
stream:文件指针
offset:偏移量
whence:偏移基础位置
whence为以下其中一种:
SEEK_SET 文件头
SEEK_CUR 文件当前位置
SEEK_END 文件尾
返回值:
成功,返回0,否则返回非零值
5.fclose
函数原型:
参数说明:
fp:文件指针
实例小结
#include <stdio.h>
#