文件:标准文件IO、系统文件IO
Linux中一切皆文件(除网口外)。
标准文件IO:C语言标准库中的文件操作函数
fopen、fread、fwrite、fclose、fprintf
系统文件IO:由操作系统直接提供的接口、直接与内核交互
open、read、write、close
差异:
1、缓存机制
标准IO:
默认使用缓冲区,数据先写入缓冲区,当满足条件时才做实际操作。
作用:减少系统调用次数,提升效率。
系统IO:
没有默认缓冲区,每次都是进行系统调用,效率低。
2、跨平台性
标准IO:
接口由C标注你定义,与操作系统无关,同一代码可在不同平台运行,跨平台性强。
系统IO:
接口是由操作系统决定,所以不能跨平台。
3、操作对象
标准IO:
操作对象是 FILE*, 其封装了文件描述符、缓冲区等信息。
系统IO:
Linux下操作对象是文件描述符,Windows下操作对象是句柄。
4、使用场景
标准IO:
通常在用户态下进行个操作。
系统IO:
一般用于底层设备驱动文件等控制。
#include <stdio.h>
/*
* 功能说明:以mode方式打开path文件
* 参数1:将要打开文件的路径及文件名
* 参数2:打开文件的方式
* r 以只读方式打开文件,文件指针指向文件起始位置。
* r+ 以读写方式打开文件,文件指针指向文件起始位置。
* w 以写的文件打开文件,如果文件存在则清空否则创建,文件指针指向文件起始位置。
* w+ 以读写方式打开文件,如果文件不存在则创建否则清空,文件指针指向文件起始位置。
* a 以追加方式打开文件,如果文件不存在则创建,文件指针指向文件末尾位置。
* a+ 以读和追加方式打开文件,如果文件不存在则创建,如果读文件则文件指针指向文件起始位置,如果追加(写)则文件指针指向文件末尾位置。
* 返回值:成功返回FILE指针,失败返回NULL并且errno被设置。
*/
FILE *fopen(const char *path, const char *mode);
/*
* 功能说明:读取文件中的数据
* 参数1:用于存储待读取的数据
* 参数2:每次读取的字节数
* 参数3:总共读取的次数
* 参数4:待读取文件的FILE指针
* 返回值:返回完整读取的nmemb数
*/
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
/*
* 功能说明:向文件中写入数据
* 参数1:待写入的数据
* 参数2:每次写入的字节数
* 参数3:总共写入的次数
* 参数4:待写入文件的FILE指针
* 返回值:返回完整写入的nmemb数
*/
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
/*
* 功能说明:关闭文件
* 参数1:待关闭文件的FILE指针
* 返回值:成功返回0,失败返回EOF且errno被设置
*/
int fclose(FILE *stream);