Hi,您好,欢迎来到西安盛图软件科技有限公司!

Linux文件描述符操作概述

发布时间:2021-12-24 10:57:30

Linux文件描述符操作概述

当看到最后一个文件描述符被关闭的时候,kill进程对我说:还有什么要交代的么?我摇了摇头。随着kill进程的手起刀落,一切归于混沌……


我是一个Linux用户级进程,编号9527。

自从我的父亲bash产生我之后,我独自占用了一个终端(伪终端),并且产生我的进程bash因为用户的优化而提前结束,使得我成了孤儿(孤儿进程),我于是被祖先进程领养

作为整个进程家族中最小的一辈,集万千宠爱与一身,基本什么事都不用做,唯一的功能就是测试等待用户请求并和操作系统交互。百无聊赖的我渐渐的打起了瞌睡。

“快醒醒!“一阵急促的提示消息把我从挂起队列中唤醒。

“怎么了?”我问。

“用户请求来了”负责调度任务的操作系统大哥带着冷漠的电子口音对我说。

嗯,终于来活了。

紧接着,操作系统递给了我一个纸片,上面写着3。

“这是什么?”我又问。

“这叫文件描述符,专门用于访问文件的。”操作系统显然以前经常回答这种问题,面无表情的快速说出了答案。

“哦,我想起来的,我出生的时候我爸bash进程给了我三个卡片,上面写着0,1,2”,我好像有点明白了。

“是,不过那三个是用于访问输入输出设备的,现在你手上这张是打开了一个普通的文件的”,操作系统回答道,依然是那种机械性的,冷冰冰的语气。

“输入和输出能用数字,普通文件也要用数字,为什么你们这么懒?”我带着不解反问道,“难道不能专门给输入输出一个方式,普通文件另一个方式么?”

“没必要”,操作系统笑了笑。他笑了,他居然会笑!

Linux中凡是能够进行数据的写入和读取的东西,无论什么,我们都会统一的管理。称之为文件,在Linux世界中,一切都是文件”。很显然,操作系统对我们的造物主的设计逻辑充满的敬佩。

“我持有这样的数字居然能打开文件”,我仔细端详着手中带有数字的金属卡片,它在CPU的电子脉冲中发出了点点荧光。

“是,但不全是”,操作系统纠正我道。“你是一个普通的进程,并不能够直接访问到文件本身,需要通过我间接的访问文件”。

每个进程有自己的打开文件的描述符表。其中每个条目都记录了单个文件描述符的相关信息,针对所有打开的文件,内核有一个系统级的描述表,其中每个条目称为打开文件句柄,存储了与一个打开文件相关的全部信息,每个文件系统都会为其中所有文件建立一个inode表。其中条目为文件的inode信息”。

“也就是说我手中的这个数字卡片只有你能识别”,我问道。

“没错,而且是所有的用户进程的文件描述符都只有我能识别,并且只能通过我识别”,操作系统的眼中闪出了一丝傲娇的光辉。

他接着说“这是由于我的管理,不同的用户级进程可以打开同样文件,每个进程也可以打开不同的文件”。

这时,用户的请求已经从缓冲区中取了出来,要求我用3号卡片读取文件中的内容并使用1号卡片输出到终端。

“常见日志打印操作”,操作系统向我解释道。“这是开发用户经常性的操作,将日志文件的内容打印出来,并查看他们管理的系统是否有问题。”

“哦,这样子”,经过了几次循环读取并打印后,我渐渐明白了文件描述符的工作原理。经过了几个时间片轮转后,我的操作也是得心应手。


突然,我手中的卡片渐渐消失,从0号开始,1号,2号,最后是三号。我不解的望向操作系统。

“看来是打印任务完毕,用户通过日志找到问题所在了,需要关掉你这个进程,让出终端”,操作系统不敢看我的眼睛。

“不是吧,仅仅是打印了几次数据,就要关掉我,而且我还掌握着这个文件呢?”,作为整个进程家族中最小的我大为不解。

“没办法,你的任务到此为止了,需要释放资源,放心吧,即使你被关掉了,bash依然会产生新的进程完成对于文件的操作”。

这时,操作系统调来了kill进程,他是专门用于关闭进程的杀手。Kill进程皱着眉头对我说:“别害怕,很快的”。

当看到最后一个文件描述符被关闭的时候,kill进程问我:还有什么要交代的么?我摇了摇头。随着kill进程的手起刀落,一切归于混沌……


关于Linux文件描述符操作概述的介绍就到这里啦,感谢盛图科技文学大家杨老师的创作,相信大家通过这样简单生动的描写一定都对Linux文件描述符操作有了更直观的认知吧

上一篇:机械臂的广泛应用
下一篇:程序员编程入门须知