linux io 文件描述符,linux中标准IO及文件描述符

1. 文件描述符

文件描述符是一个整型数值

文件描述符是标记一个被打开的特定的文件的

Linux系统分配文件描述符有一定的规则:从小到大的方式来分配文件描述符

文件关闭后, 之前分配的文件描述符会被系统回收

系统回收的文件描述符会重新与未被占用的文件描述符一起, 以从小到大的规则再次进行分配

2. Linux系统启动之后, 返回的文件描述符是从fd = 3开始的, 为什么?

Linux系统启动之后, 返回的文件描述符是从fd = 3开始的

linux io 文件描述符,linux中标准IO及文件描述符_第1张图片

linux io 文件描述符,linux中标准IO及文件描述符_第2张图片

Linux系统启动之后, fd = 0, 1, 2三个文件描述符被分配给了stdin, stdout及stderr

fd = 0, 1, 2三个文件描述符可以通过编程的方式关闭文件来释放(当前的stdout是输出到命令行的), 然后重新打开一个文件, 这样标准输入输出便会重定位到了我们打开的文件了. 这样可以实现标准输出的重定位.

linux io 文件描述符,linux中标准IO及文件描述符_第3张图片

linux io 文件描述符,linux中标准IO及文件描述符_第4张图片

3. 文件描述符的复制

1. dup函数复制文件描述符

- dup复制文件描述符,新的文件描述符是Linux系统自动分配的未被使用的最小值

linux io 文件描述符,linux中标准IO及文件描述符_第5张图片

linux io 文件描述符,linux中标准IO及文件描述符_第6张图片

2. dup2复制文件描述符

- dup2复制文件描述符时,编程者可以指定复制的新的文件描述符的数值,以下实例指定文件描述符为6.

linux io 文件描述符,linux中标准IO及文件描述符_第7张图片

linux io 文件描述符,linux中标准IO及文件描述符_第8张图片

3. fcntl复制文件描述符

- fcntl也可以用来复制文件描述符

- fcntl的函数原型为 int fcntl(int fd, int cmd, ... /* arg */ );

各参数含义为:

fd: 旧的文件描述符

cmd:命令参数,不同的命令参数执行不同的任务

.../* arg */: 变参,与cmd参数密切相关.例如在cmd为F_DUPFD时,fcntl函数可以指定复制后的新的文件描

述符的大小大于或者等于参数arg

linux io 文件描述符,linux中标准IO及文件描述符_第9张图片

linux io 文件描述符,linux中标准IO及文件描述符_第10张图片

4. Linux中的标准IO

之前操作文件有FileIO, 为何这里又出现了标准IO?标准IO也是操作文件的一些标准库函数

标准IO是在FileIO的一些列Linux内核API的基础上进行了一层封装

标准IO在封装时提供了应用层对文件读写的缓冲, 这样可以与Linux kernel在对文件读写是的缓冲进行配合, 从而提高文件操作的效率

标准IO库函数屏蔽了不同操作系统之间的差别, 从而在不同操作系统上使用方法几乎一模一样(Linux, Windows)

标准IO包含哪些常用的库函数及如何使用?

常用的标准IO库函数有: fopen, fclose, fwrite, fread, fflush, fseek等等

常用的标准IO库函数的用法与FileIO的常用函数基本对应及相似

举例说明用法

linux io 文件描述符,linux中标准IO及文件描述符_第11张图片

linux io 文件描述符,linux中标准IO及文件描述符_第12张图片

你可能感兴趣的:(linux,io,文件描述符)