标准文件I/O补充知识
在linux中,文件总共划分为七种,他们分别是:
1、普通文件(regular):存于外部存储器中,用于存储普通数据。
2、目录文件(directory):用于存放目录项,是文件系统管理的重要文件类型。
3、管道文件(pipe):一种用于进程间通信的特殊文件,也称为命名管道FIFO。
4、套接字文件(socket):一种用于网络间通信的特殊文件。
5、链接文件(link):用于间接访问另外一个目标文件,相当于Windows快捷方式。
6、字符设备文件(character):字符设备在应用层的访问接口。
7、块设备文件(block):块设备在应用层的访问接口。
C标准库在应用层,系统·I/O驱动在内核层,硬件开发在硬件层。
图片:代码展示:
#include <stdio.h>
#include <string.h>
#include <strings.h>// 这三个文件指针可以直接使用
//FILE *stdin;
//FILE *stdout;
//FILE *stderr;#if 0
int main(int argc,char *argv[])
{FILE* fp_r = fopen("1.txt", "r");if (NULL == fp_r){perror("1.txt open fail");return -1;}FILE* fp_w = fopen("2.txt", "w");if (NULL == fp_w){perror("2.txt open fail");return -1;}// 读取1.txt中的数据char buf[101];while(!feof(fp_r)){memset(buf, 0, sizeof(buf));//bzero(buf, sizeof(buf));fread(buf, 20, 5, fp_r);// puts(buf); // 测试语句fwrite(buf, strlen(buf), 1, fp_w);}fclose(fp_r);fclose(fp_w);return 0;
}
#endif#if 1int main()
{char str[] = "hello";fgets(str, 10, stdin);fputs(str, stdout);return 0;
}#endif
文件:标准文件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:
一般用于底层设备驱动文件等控制。