欧美在线视频二区-欧美亚洲另类在线视频-欧美色图12p-日韩另类在线-青娱乐激情视频-亚洲最大天堂网-91精品国产高清一区二区三密臀-av大片在线观看-国产精品自拍99-国产精品色婷婷99久久精品-亚洲视频免费-91视频福利-国产成人亚洲影院在线观看-国产自在自线午夜精品-亚洲一区二区久久-中国一级免费毛片-国产免费www

當(dāng)前位置: 首頁 > 綜合 >

Linux之從進(jìn)程角度來理解文件描述符

2023-05-28 06:38:20 來源:博客園

文件描述符是一個非負(fù)整數(shù),而內(nèi)核需要通過這個文件描述符才可以訪問文件。當(dāng)我們在系統(tǒng)中打開已有的文件或新建文件時,內(nèi)核每次都會給特定的進(jìn)程返回一個文件描述符,當(dāng)進(jìn)程需要對文件進(jìn)行讀或?qū)懖僮鲿r,都要依賴這個文件描述符進(jìn)行。在Linux或類UNIX系統(tǒng)中內(nèi)核默認(rèn)會為每個進(jìn)程創(chuàng)建三個標(biāo)準(zhǔn)的文件描述符,分別是0(標(biāo)準(zhǔn)輸入)、1(標(biāo)準(zhǔn)輸出)和2(標(biāo)準(zhǔn)錯誤)。

通過查看/proc/PID號/fd/目錄下的文件,就可以查看每個進(jìn)程擁有的所有文件描述符。

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

當(dāng)打開文件時系統(tǒng)內(nèi)核就會為特定的進(jìn)程自動創(chuàng)建對應(yīng)的文件描述符。首先在一個Terminal中使用vi打開temp文件;


(資料圖片僅供參考)

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

新打開一個Terminal并查看此進(jìn)程的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

我們也可以手動定義文件描述符,并通過文件描述符操作文件;

創(chuàng)建文件描述符

exec文件描述符 <> 文件名

引用文件描述符

&文件描述符

關(guān)閉文件描述符

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

我們touch一個文件,并將其文件描述符設(shè)置為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

如果我們設(shè)置文件描述符只允許讀,那么我們寫文件的時候就會報錯;

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

我們也可以創(chuàng)建一個同時可讀可寫的文件描述符;

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
標(biāo)簽:
最近更新
15037178970
婚姻法
技術(shù)服務(wù)合同糾紛的常見類型有哪些?技術(shù)合同糾紛怎么處理?
訴訟離婚的法定情形有哪些?訴訟離婚的定義是什么?
怎么起訴別人侵犯我的肖像權(quán)?怎樣才算侵犯個人隱私權(quán)?
信用卡逾期銀行可以找父母嗎?借款人未按照約定的期限返還借款的怎么辦?
客戶拖欠貨款怎么辦?客戶拖欠貨款不給可以采取哪些方式?
小車撞電動車賠償標(biāo)準(zhǔn)是什么?小車撞電動車小車全責(zé)怎么理賠?
用抵押貸款購買房屋后 如確實(shí)無能力歸還貸款怎么辦?
醉酒駕車處罰流程是什么?醉酒駕駛涉嫌危險駕駛罪處罰內(nèi)容是什么?
股權(quán)質(zhì)押如何理解?股權(quán)質(zhì)押到期可以約定自動解除嗎?
違反保密協(xié)議需要支付違約金嗎? 工程質(zhì)量問題的違約金約定方法是什么?
知識糾紛
1 個人征信逾期記錄消除方法有哪些?個人征信逾期的法律依據(jù)是什么?
2 物證包括哪些?書證與物證的區(qū)別是什么?
3 哪些行為不能提起行政訴訟?行政訴訟證據(jù)有哪些類型?
4 土地承包經(jīng)營權(quán)轉(zhuǎn)讓期限是多久?農(nóng)村土地承包經(jīng)營權(quán)轉(zhuǎn)讓程序分哪三種?
5 合同解除權(quán)的行使方式有哪些?合同解除權(quán)的行使方式法律依據(jù)是什么?
6 失業(yè)保險金期間可以享受哪些待遇?失業(yè)保險金時職工的工作年限是幾年?
7 經(jīng)營婚姻的方法與技巧有哪些?經(jīng)營婚姻的6個方法分享
8 快遞超過7天怎找誰賠償(快遞寄掉了怎么賠償)
公司法
家暴法律的判刑標(biāo)準(zhǔn)是什么?家暴立案必須滿足三個條件是什么?
關(guān)于房屋遺產(chǎn)稅可以避免么?應(yīng)該怎么規(guī)避遺產(chǎn)稅?
中華人民共和國個人所得稅法第二條是什么?下列哪些個人所得應(yīng)當(dāng)繳納個人所得稅?
認(rèn)定重婚罪需要滿足哪些條件?法律對重婚罪怎么處理?
判決書下來多久可以申請強(qiáng)制執(zhí)行?欠款不還法院強(qiáng)制執(zhí)行程序是什么?
家庭暴力相關(guān)的法律法規(guī)有哪些?實(shí)踐中實(shí)施家庭暴力應(yīng)負(fù)什么法律責(zé)任?
民事執(zhí)行程序有哪些步驟?民事執(zhí)行申請書格式是什么?
欠錢不還找誰解決?民事訴訟法第一百二十二條內(nèi)容是什么?
一般性作品著作權(quán)登記需提交的材料有什么?申請表的內(nèi)容有哪些?
如何理解限制物權(quán)?限制物權(quán)擔(dān)保物權(quán)是什么?物權(quán)合同與債權(quán)合同的區(qū)別有哪些?
合同法
離婚撤銷的條件是什么? 可撤銷婚姻離婚怎么辦理?

2023-05-26

賣家不發(fā)貨怎么辦?民法典第五百六十三條的內(nèi)容是什么?

2023-05-26

勞動者提前解除勞動合同應(yīng)提前多少天通知?解除勞動合同時應(yīng)辦理哪些手續(xù)?

2023-05-26

過失傷害他人身體致人輕傷會怎么被判刑?輕傷的量刑標(biāo)準(zhǔn)是什么?

2023-05-25

特殊家庭指的是什么?特殊家庭三個全覆蓋是哪三個?

2023-05-25

農(nóng)村土地承包經(jīng)營權(quán)證有什么用?土地承包經(jīng)營權(quán)流轉(zhuǎn)程序是什么?

2023-05-25

勞動糾紛
離婚撤銷的條件是什么? 可撤銷婚姻離婚怎么辦理?
賣家不發(fā)貨怎么辦?民法典第五百六十三條的內(nèi)容是什么?
勞動者提前解除勞動合同應(yīng)提前多少天通知?解除勞動合同時應(yīng)辦理哪些手續(xù)?
過失傷害他人身體致人輕傷會怎么被判刑?輕傷的量刑標(biāo)準(zhǔn)是什么?
特殊家庭指的是什么?特殊家庭三個全覆蓋是哪三個?
農(nóng)村土地承包經(jīng)營權(quán)證有什么用?土地承包經(jīng)營權(quán)流轉(zhuǎn)程序是什么?

法律解答網(wǎng)版權(quán)所有 2005-2022

備案號:京ICP備2022016840號-54 聯(lián)系qq:920 891 263 @qq.com

连平县| 正安县| 绵阳市| 陇川县| 龙江县| 三明市| 洛南县| 东丽区| 安溪县| 抚顺县| 文昌市| 紫阳县| 泽普县| 墨竹工卡县| 松江区| 汪清县| 铜鼓县| 潼关县| 资兴市| 内乡县| 浏阳市| 大埔县| 上虞市| 沛县| 杭锦后旗| 鄂伦春自治旗| 大名县| 禄丰县| 兴山县| 洪雅县| 阜阳市| 桓仁| 朝阳区| 察隅县| 长沙市| 海城市| 英德市| 扬州市| 沙田区| 湖北省| 大宁县|