系统编程之文件IO(七)——0,1,2三个文件描述符与库函数和系统调用的区别

一、0,1,2三个文件描述符

stderr:终端(无缓冲区)
stdin:键盘
stdout:终端(有缓冲区)

echo hello > /dev/stderr
echo hello > /dev/stdout

文件描述符:
0:stdin
1:stdout
2:stderr
文件指针:stdin:stdin
stdin:stdin
stderr:stderr
stdout:stdout

char buffer[1024];
fgets(buffer, sizeof(buffer) - 1, stdin);

fputs(buffer, stdout);

二、库函数VS系统调用

文件分类
普通文件、目录文件、设备文件、链接文件
|
库函数(标准IO) > 系统调用API(初级IO)

如何选择库函数、系统调用API的方式(区别)?

在这里插入图片描述
库函数的读写效率优于系统调用(库函数有缓冲式访问),对文件做大量读写操作(库函数)

举例:
系统调用只能一次一次的访问硬件,而每次访问硬件就像是一次中断,每次中断都需要保存那个时候的状态,所以开销很大,需要避免
而在库函数时,访问硬件后直接将磁盘里的东西全部读到缓存区里,之后,软件直接访问缓冲区,不要再访问硬件了

int fread(void *ptr, size_t size, size_t nmemb, FILE *fp)
{
	//read(fd,ptr ,size *nmemb);Linux
	//win:read
}

C语言中有一个内置宏,可以区分是WIN还是Linux

库函数可以跨平台,系统调用不可以,依赖于操作平台

在这里插入图片描述
操作特殊文件,如:设备文件,只能用系统调用
高级IO,文件映射

posted @ 2022-04-16 16:38  周末不下雨  阅读(29)  评论(0编辑  收藏  举报