目录
(一)FILE *fopen(char *filename ,char *mode)
(二)size_t fwirte(char *buf,size_t bsize,size_t nmen,FILE *fp)
(三)size_t fread(char *buf,size_t bsize,size_t nmen,FILE *fp)
(六)int fseek(FILE *fp,size_t offset,size_t whence)
一、文件io的概念
IO:input/output
文件IO:硬件的IO——对硬件进行数据的输入与输出
硬盘/磁盘:存储数据的硬件(持久性-断电后数据依然存在),作为数据的持久化存储。
内存条:吞吐量更大的存储硬件(易失型-断电后数据消失),故而不做数据存储,作数据处理的中间缓冲带。
二、文件的操作
以文件为单位对磁盘进行操作
FILE *这个指针也叫作文件流指针——通过这个指针对指定的文件进行操作
(一)FILE *fopen(char *filename ,char *mode)
filename:文件名——用户对文件标识区分
mode:文件打开方式——决定了我们能够对文件要进行什么操作
r:以只读方式打开文件(若文件不存在就会出错)
w:以只写方式打开文件(若文件不存在会创建新文件,若文件存在则会清空文件原有内容 )
a:以追加写方式打开文件(若文件不存在会创建新文件,若文件存写入数据时总是追加到文件末尾)
r+:以可读可写方式打开文件(若文件不存在就会出错),文件存在从文件起始位置操作数据(写入的话会覆盖原有数据)
w+:以可读可写方式打开文件(若文件不存在会创建新文件,若文件存在则会清空文件原有内容 )
a+:以可读&追加写方式打开方式(若文件不存在会创建新文件,若文件存写入数据时总是追加到文件末尾)
r+,w,w+写入数据时默认都是从起始位置覆盖写入;a会将读写位置先移动到文件末尾,然后再写入数据
b:以二进制形式打开文件,默认是以文本形式打开(在文本模式下操作\n换行就会被解释成为\r\n写入文件)
返回值:成功返回文件流指针——文件的操作句柄;失败则返回NULL。接下来文件所有操作都是文件流指针进行的。
句柄:例如有一个空调,操作是通过遥控进行的,就说遥控是空调的句柄。
(二)size_t fwirte(char *buf,size_t bsize,size_t nmen,FILE *fp)
buf:buf是一块内存空间地址,表示要把哪块空间中的数据写入文件中。
bsize:块大小 nmem:块个数
bsize*nmenm:实际要将buf中多少字节的数据写入文件
fp:fopen返回文件流指针
返回值:成功返回实际写入文件的完整块个数;失败则返回小于nmem大小的数字
ps:当磁盘剩余空间只有10个字节,因此只能写入2.5个int数据,返回值就为2
(三)size_t fread(char *buf,size_t bsize,size_t nmen,FILE *fp)
buf:buf是一块内存空间地址,表示把从文件读取到的数据放到内存的buf这块空间中。
bsize:块大小 nmem:块个数
bsize*nmenm:实际要从文件读取多少数据
fp:fopen返回文件流指针
返回值:成功返回nmem,失败返回实际读取到的完整块个数
(四)int ferror(FILE *fp)
功能:用于判断上一步文件操作是否成功,通常是fread之后用于判断数据是否成功
返回值:没有错误则返回非0值,上一次操作出错则返回false
(五)int feof(FILE *fp)
功能:判断当前是否读取文件内容(文件读写位置)到达了文件末尾
返回值:没有错误则返回非0值,上一次操作出错则返回0
(六)int fseek(FILE *fp,size_t offset,size_t whence)
fp:文件流指针——操作句柄
offset:偏移量
whence:相对偏移的起始位置
SEEK_SET文件起始位置 SEEK_CUR当前读写位置 SEEK_END文件末尾
功能:将文件的读写位置跳转到从whence位置偏移offset个字节处(跳转到哪里,读写数据就是从哪里开始)
返回值:失败返回非0,成功则返回0
(七)int fclose(FILE *fp)
功能:关闭文件,释放资源
fp:fopen返回的操作句柄
返回值:成功返回0