当前位置: 首页 > 综合 >

Linux之从进程角度来理解文件描述符

2023-05-28 06:38:20 来源:博客园

文件描述符是一个非负整数,而内核需要通过这个文件描述符才可以访问文件。当我们在系统中打开已有的文件或新建文件时,内核每次都会给特定的进程返回一个文件描述符,当进程需要对文件进行读或写操作时,都要依赖这个文件描述符进行。在Linux或类UNIX系统中内核默认会为每个进程创建三个标准的文件描述符,分别是0(标准输入)、1(标准输出)和2(标准错误)。

通过查看/proc/PID号/fd/目录下的文件,就可以查看每个进程拥有的所有文件描述符。

mango@mango-ubuntu:~/Documents/filedesc$ sudo ls -l /proc/$$/fdtotal 0lrwx------ 1 mango mango 64  5月 24 11:08 0 -> /dev/pts/1lrwx------ 1 mango mango 64  5月 24 11:08 1 -> /dev/pts/1lrwx------ 1 mango mango 64  5月 24 11:08 2 -> /dev/pts/1lrwx------ 1 mango mango 64  5月 24 11:08 255 -> /dev/pts/1

当打开文件时系统内核就会为特定的进程自动创建对应的文件描述符。首先在一个Terminal中使用vi打开temp文件;


(资料图片仅供参考)

mango@mango-ubuntu:~/Documents/filedesc$ vi temp

新打开一个Terminal并查看此进程的fd信息;

mango@mango-ubuntu:~/Documents/filedesc$ sudo ps -a   | grep vi   8888 pts/1    00:00:00 vimango@mango-ubuntu:~/Documents/filedesc$ sudo ls -l /proc/8888/fdtotal 0lrwx------ 1 mango mango 64  5月 24 11:22 0 -> /dev/pts/1lrwx------ 1 mango mango 64  5月 24 11:22 1 -> /dev/pts/1lrwx------ 1 mango mango 64  5月 24 11:22 2 -> /dev/pts/1lrwx------ 1 mango mango 64  5月 24 11:22 3 -> /home/mango/Documents/filedesc/.temp.swp

我们也可以手动定义文件描述符,并通过文件描述符操作文件;

创建文件描述符

exec文件描述符 <> 文件名

引用文件描述符

&文件描述符

关闭文件描述符

exec文件描述符<&-exec文件描述符>&-

我们touch一个文件,并将其文件描述符设置为10,并通过这个文件描述符来操作文件;

mango@mango-ubuntu:~/Documents/filedesc$ touch testfile11mango@mango-ubuntu:~/Documents/filedesc$ sudo ls -l /proc/$$/fdtotal 0lrwx------ 1 mango mango 64  5月 24 11:39 0 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 1 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 2 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 255 -> /dev/pts/2mango@mango-ubuntu:~/Documents/filedesc$ exec 10>testfile11mango@mango-ubuntu:~/Documents/filedesc$ echo hello >&10mango@mango-ubuntu:~/Documents/filedesc$ echo "world">&10mango@mango-ubuntu:~/Documents/filedesc$ cat testfile11helloworldmango@mango-ubuntu:~/Documents/filedesc$ exec 10<&-mango@mango-ubuntu:~/Documents/filedesc$ echo "closed">&10bash: 10: Bad file descriptor

如果我们设置文件描述符只允许读,那么我们写文件的时候就会报错;

mango@mango-ubuntu:~/Documents/filedesc$ exec 11&11bash: echo: write error: Bad file descriptormango@mango-ubuntu:~/Documents/filedesc$ ls -l /proc/$$/fdtotal 0lrwx------ 1 mango mango 64  5月 24 11:39 0 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 1 -> /dev/pts/2lr-x------ 1 mango mango 64  5月 24 11:52 11 -> /home/mango/Documents/filedesc/testfile11lrwx------ 1 mango mango 64  5月 24 11:39 2 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 255 -> /dev/pts/2mango@mango-ubuntu:~/Documents/filedesc$ exec 11<&-mango@mango-ubuntu:~/Documents/filedesc$ ls -l /proc/$$/fdtotal 0lrwx------ 1 mango mango 64  5月 24 11:39 0 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 1 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 2 -> /dev/pts/2lrwx------ 1 mango mango 64  5月 24 11:39 255 -> /dev/pts/2

我们也可以创建一个同时可读可写的文件描述符;

mango@mango-ubuntu:~/Documents/filedesc$ exec 11<>testfile11mango@mango-ubuntu:~/Documents/filedesc$ cat <&11helloworldmango@mango-ubuntu:~/Documents/filedesc$ echo "read write" >&11mango@mango-ubuntu:~/Documents/filedesc$ cat <&11mango@mango-ubuntu:~/Documents/filedesc$ exec 11<>testfile11mango@mango-ubuntu:~/Documents/filedesc$ cat <&11helloworldread writemango@mango-ubuntu:~/Documents/filedesc$ exec 11<&-mango@mango-ubuntu:~/Documents/filedesc$ cat <&11bash: 11: Bad file descriptor
标签:
最近更新
15037178970
婚姻法
技术服务合同纠纷的常见类型有哪些?技术合同纠纷怎么处理?
诉讼离婚的法定情形有哪些?诉讼离婚的定义是什么?
怎么起诉别人侵犯我的肖像权?怎样才算侵犯个人隐私权?
信用卡逾期银行可以找父母吗?借款人未按照约定的期限返还借款的怎么办?
客户拖欠货款怎么办?客户拖欠货款不给可以采取哪些方式?
小车撞电动车赔偿标准是什么?小车撞电动车小车全责怎么理赔?
用抵押贷款购买房屋后 如确实无能力归还贷款怎么办?
醉酒驾车处罚流程是什么?醉酒驾驶涉嫌危险驾驶罪处罚内容是什么?
股权质押如何理解?股权质押到期可以约定自动解除吗?
违反保密协议需要支付违约金吗? 工程质量问题的违约金约定方法是什么?
知识纠纷
1 个人征信逾期记录消除方法有哪些?个人征信逾期的法律依据是什么?
2 物证包括哪些?书证与物证的区别是什么?
3 哪些行为不能提起行政诉讼?行政诉讼证据有哪些类型?
4 土地承包经营权转让期限是多久?农村土地承包经营权转让程序分哪三种?
5 合同解除权的行使方式有哪些?合同解除权的行使方式法律依据是什么?
6 失业保险金期间可以享受哪些待遇?失业保险金时职工的工作年限是几年?
7 经营婚姻的方法与技巧有哪些?经营婚姻的6个方法分享
8 快递超过7天怎找谁赔偿(快递寄掉了怎么赔偿)
公司法
家暴法律的判刑标准是什么?家暴立案必须满足三个条件是什么?
关于房屋遗产税可以避免么?应该怎么规避遗产税?
中华人民共和国个人所得税法第二条是什么?下列哪些个人所得应当缴纳个人所得税?
认定重婚罪需要满足哪些条件?法律对重婚罪怎么处理?
判决书下来多久可以申请强制执行?欠款不还法院强制执行程序是什么?
家庭暴力相关的法律法规有哪些?实践中实施家庭暴力应负什么法律责任?
民事执行程序有哪些步骤?民事执行申请书格式是什么?
欠钱不还找谁解决?民事诉讼法第一百二十二条内容是什么?
一般性作品著作权登记需提交的材料有什么?申请表的内容有哪些?
如何理解限制物权?限制物权担保物权是什么?物权合同与债权合同的区别有哪些?
合同法
离婚撤销的条件是什么? 可撤销婚姻离婚怎么办理?

2023-05-26

卖家不发货怎么办?民法典第五百六十三条的内容是什么?

2023-05-26

劳动者提前解除劳动合同应提前多少天通知?解除劳动合同时应办理哪些手续?

2023-05-26

过失伤害他人身体致人轻伤会怎么被判刑?轻伤的量刑标准是什么?

2023-05-25

特殊家庭指的是什么?特殊家庭三个全覆盖是哪三个?

2023-05-25

农村土地承包经营权证有什么用?土地承包经营权流转程序是什么?

2023-05-25

劳动纠纷
离婚撤销的条件是什么? 可撤销婚姻离婚怎么办理?
卖家不发货怎么办?民法典第五百六十三条的内容是什么?
劳动者提前解除劳动合同应提前多少天通知?解除劳动合同时应办理哪些手续?
过失伤害他人身体致人轻伤会怎么被判刑?轻伤的量刑标准是什么?
特殊家庭指的是什么?特殊家庭三个全覆盖是哪三个?
农村土地承包经营权证有什么用?土地承包经营权流转程序是什么?

法律解答网版权所有 2005-2022

备案号:京ICP备2022016840号-54 联系qq:920 891 263 @qq.com