标准IO
- C语言标准库中的文件操作函数
fopen | fread | fwrite | fclose | fprintf |
- 在成功调用这些函数后,返回一个文件的指针,失败返回NULL
FILE *fopen(path,mode); //以mode方式打开文件
/*mode各种模式
r 只读,返回一个指向文件开头的指针
r+ 读写,返回一个指向文件开头的指针
w 只写,创建一个文件或清空文件的数据,返回一个指向文件开头的指针
w+ 读写,只写,创建一个文件或清空文件的数据,返回一个指向文件开头的指针
a 追加,不存在则创建一个文件,返回指向文件末尾的指针
a+ 读和追加,不存在则创建一个文件,如果读文件则返回一个指向开头的指针,输入则是在结尾
b 打开二进制文件
*/
size_t fread(*ptr,size,nmemb,FILE* 文件);
// 存储指针,读取字节数,读取次数,目标文件
//返回值:返回完整读取的nmemb数
//使用feof函数判断文件读完,到文件末尾会返回非0值
size_t fwrite(*ptr,size,nmemb,FILE* 文件);
// 数据指针,读取字节数,读取次数,目标文件
//返回值:返回完整读取的nmemb数
void fclose(FILE *文件);
//失败返回 EOF
系统IO
- 系统文件:操作系统直接提供的接口,直接与内核交互
头文件 | typer.h \ stat.h | uinstd.h | fcntl.h | unistd |
函数 | open | read | write | close |
int open(char *,int flag)
//权限随机,flag八进制0644
int open(char *,int flag,mode_t mode);
//如果文件创建时指定mode权限,仅在文件创建时生效,只能创建普通文件
size_t read(int fd,void *,size_t count);
// 文件
size_t write(int fd,void *,size_t count);
int close (int fd);
int rfd = open("a.txt",0_RDONLY);
if(rfd < 0)
return -1;
int wfd = open("b.txt",0_RDONLY);
if(wfd < 0)
return -1;
char buf[100];
int len = 0;
while(1)
{
len = read(rfd,buf,sizeof(buf)-1);
if(len <= 0)
break;
write(wfd,buf,len);
}
close(rfd);
close(wfd);
差异
缓存机制
- 标准:默认使用缓冲区,数据先存入缓冲区,遇到行缓冲机制
\n
或缓冲区满才会输出,减少系统调用次数,提升效率 - 系统:没有默认缓冲区,每次都是系统调用,效率低
- 标准:默认使用缓冲区,数据先存入缓冲区,遇到行缓冲机制
跨平台性
- 标准:接口c标注定义,与操作系统无关,统一代码可在不同平台运行
- 系统:接口由系统决定,不能跨平台
操作对象
- 标准:操作对象是*FILE,其封装文件描述符、缓冲区信息
- 系统:LINUX 操作对象是文件描述符,Windows 操作对象是句柄
使用场景
- 标准:通常在用户状态下进行,控制应用层,文件读写类
- 系统:一般用于底层设备驱动文件等控制