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

简介: 系统编程之文件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的方式(区别)?


0a2653c851af460fa595bd959398a8f1.png


库函数的读写效率优于系统调用(库函数有缓冲式访问),对文件做大量读写操作(库函数)


举例:

系统调用只能一次一次的访问硬件,而每次访问硬件就像是一次中断,每次中断都需要保存那个时候的状态,所以开销很大,需要避免

而在库函数时,访问硬件后直接将磁盘里的东西全部读到缓存区里,之后,软件直接访问缓冲区,不要再访问硬件了


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


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


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


0a2653c851af460fa595bd959398a8f1.png


操作特殊文件,如:设备文件,只能用系统调用

高级IO,文件映射


相关文章
|
1月前
|
缓存 Linux API
文件IO和标准IO的区别
文件IO和标准IO的区别
22 2
|
12天前
|
存储 固态存储 Java
文件IO讲解
文件IO讲解
28 0
|
30天前
|
算法 大数据 数据处理
【软件设计师备考 专题 】IO控制方式(中断系统、DMA、IO处理机方式)
【软件设计师备考 专题 】IO控制方式(中断系统、DMA、IO处理机方式)
41 1
|
2月前
|
API
使用commons-io-2.0 API来实现监听文件变化
使用commons-io-2.0 API来实现监听文件变化
|
1月前
|
存储 Java 数据处理
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
3月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
3月前
|
存储 移动开发 Java
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
从零开始学习 Java:简单易懂的入门指南之IO字节流(三十)
|
3月前
|
存储 网络协议 Java
Java学习—IO流
Java学习—IO流
|
3月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)