Linux——文件描述符

Posted 一棵灬胡杨树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux——文件描述符相关的知识,希望对你有一定的参考价值。

何为文件描述符?

在进程中每打开一个文件,都会创建有相应的文件描述信息struct file,这个描述信息被添加在pcb的struct files_struct中,以数组的形式进行管理,随即向用户返回数组的下标作为文件描述符,用于操作文件。

每个进程在PCB(Process Control Block)中保存着一份文件描述符表,文件描述符就是这个表的索引,每个表项都有一个指向已打开文件的指针。

文件描述符 0 与 进程的标准输入(standard input)关联
文件描述符 1 与 标准输出(standard output)关联
文件描述符 2 与 标准错误(standard error)关联

dup2函数

dup2可以用参数newfd指定新文件描述符的数值。若参数newfd已经被程序使用,则系统就会将newfd所指的文件关闭,若newfd等于oldfd,则返回newfd,而不关闭newfd所指的文件。dup2所复制的文件描述符与原来的文件描述符共享各种文件状态。共享所有的锁定,读写位置和各项权限或flags等。

举个简单的例子:

在我们打开tmp.txt文件后,使用dup2函数,在printf打印之前,将1重定向到了指定的文件,因此printf打印将数据写入了指定文件中。

Notes:重定向本质在不改变所操作的文件描述符的情况下,通过改变描述符对应的文件描述信息进而实现改变所操作的文件。

以上是关于Linux——文件描述符的主要内容,如果未能解决你的问题,请参考以下文章

linux标准输入输出

linux函数深入探索——open函数打开文件是否将文件内容加载到内存空间

文件描述符与socket连接

linux优化小节

Linux系统基础调优

Linux基础优化与安全小结