亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
12下一頁(yè)
最近訪問板塊 發(fā)新帖
查看: 4818 | 回復(fù): 16
打印 上一主題 下一主題

[原創(chuàng)]ls與devfs  關(guān)閉 [復(fù)制鏈接]

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-06-02 19:00 |只看該作者 |倒序?yàn)g覽
前兩天yjh777問了一個(gè)/dev/fd的問題,當(dāng)時(shí)沒搞懂。這兩天琢磨了一下想通了,貼出來(lái)供yjh777兄參考:

在較新的linux內(nèi)核中引入了devfs,即/dev,有點(diǎn)類似/proc,它是一種虛擬文件系統(tǒng)。只是在需要時(shí)才動(dòng)態(tài)地生成需要的設(shè)備文件,不像以前不管用不用必須先建好一大堆設(shè)備文件。

/dev/fd/下保存當(dāng)前進(jìn)程用到的文件句柄,對(duì)于不同的用戶,不同的登錄終端,不同的進(jìn)程,使用的文件句柄的指向是不會(huì)一樣的。
執(zhí)行命令
  1. cd /dev/fd
復(fù)制代碼

這樣會(huì)進(jìn)入當(dāng)前shell對(duì)應(yīng)的那一個(gè)“虛擬”的目錄,此時(shí)當(dāng)前的目錄就是當(dāng)前shell對(duì)應(yīng)的devfs中的一個(gè)“凝固的”映像,請(qǐng)記住這一點(diǎn)。
這時(shí)ls -l會(huì)看到當(dāng)前目錄的文件,也就是當(dāng)前的shell所使用的fd。因?yàn)榱谐龅氖且粋(gè)“凝固的”映像的結(jié)果,所以如果使用watch,命令來(lái)監(jiān)視的話,結(jié)果是不會(huì)看到任何改變的。

那么命令
  1. ls -l /dev/fd/
復(fù)制代碼

會(huì)列出什么呢?同樣是當(dāng)前進(jìn)程(這里的“當(dāng)前進(jìn)程”是當(dāng)前shell嗎?先想想,答案下面再給出)使用的fd,標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都是不變的。但是執(zhí)行幾次同樣的命令,你會(huì)發(fā)現(xiàn)有一個(gè)fd的指向卻每次執(zhí)行時(shí)都在變化。
  1. 3 -> /proc/?????/fd
復(fù)制代碼

其中?????代表的數(shù)字也就是一個(gè)進(jìn)程號(hào),在不斷地增大。
實(shí)際上我們隨便看一個(gè)進(jìn)程相應(yīng)的/proc/?????/fd目錄,里面存放的文件就是對(duì)應(yīng)該進(jìn)程使用的文件句柄。
那么我們?cè)傧胂,ls -l /dev/fd/命令從何處取得當(dāng)前進(jìn)程的fd呢?我想是打開了/proc/?????/fd文件(這里取文件的廣義含義,嚴(yán)格地說(shuō)是一個(gè)偽文件系統(tǒng)下的一個(gè)目錄文件),從其中讀取了相應(yīng)的fd。進(jìn)程號(hào)?????對(duì)應(yīng)的進(jìn)程應(yīng)該就是當(dāng)前進(jìn)程 -- ls命令,注意并不是當(dāng)前shell!不過因?yàn)閘s命令繼承了當(dāng)前shell的fd,除了用來(lái)讀取fd的句柄fd-3之外,fd-0,fd-1和fd-2與當(dāng)前shell使用的fd指向應(yīng)該是相同的。

OK,讓我們?cè)倏纯疵?br />
  1. watch "ls -l /dev/fd/"
復(fù)制代碼

的顯示。類似下面這樣:
  1. lrwx------  1 user user 64  6  2 18:17 0 -> /dev/null
  2. l-wx------  1 user user 64  6  2 18:17 1 -> pipe:[280311]
  3. lrwx------  1 user user 64  6  2 18:17 2 -> /dev/pts/0
  4. lr-x------  1 user user 64  6  2 18:17 3 -> /proc/22698/fd
復(fù)制代碼

我們看到:
  • 標(biāo)準(zhǔn)輸入被重定向到/dev/null,說(shuō)明ls命令不用接受鍵盤輸入。
  • 標(biāo)準(zhǔn)輸出指向一個(gè)管道文件,可以想見,ls命令的輸出通過管道交由watch命令處理。
  • 標(biāo)準(zhǔn)錯(cuò)誤輸出沒有重定向,仍然指向我們遠(yuǎn)程登錄的終端。
  • fd-3指向文件/proc/22698/fd,我們?cè)谏厦嬉呀?jīng)解釋過了。

其中pipe后面的數(shù)字和/proc/后面的數(shù)字是不斷地增大的,為什么?這個(gè)容易理解,watch命令不斷地重新調(diào)用ls命令,新的ls命令的進(jìn)程號(hào)不斷地變大;用來(lái)接收l(shuí)s命令輸出的管道也自然每次都是新的,不過這里的數(shù)字代表什么含義,我還不清楚,知道的大牛請(qǐng)指教!

上面就是目前我對(duì)這個(gè)問題的理解。聲明一下:我沒看過devfs、ls、watch的源碼,所以本貼有很多猜測(cè)的成份,說(shuō)得不對(duì)的請(qǐng)大家指出。^_^

[ 本帖最后由 woodie 于 2006-6-5 08:38 編輯 ]

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
2 [報(bào)告]
發(fā)表于 2006-06-02 19:04 |只看該作者

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2006-06-02 23:28 |只看該作者
原帖由 woodie 于 2006-6-2 19:00 發(fā)表
..........
其中pipe后面的數(shù)字和/proc/后面的數(shù)字是不斷地增大的,為什么?這個(gè)容易理解,watch命令不斷地重新調(diào)用ls命令,新的ls命令的進(jìn)程號(hào)不斷地變大;用來(lái)接收l(shuí)s命令輸出的管道也自然每次都是新的,不過這里的數(shù)字代表什么含義,我還不清楚 ...


1 -> pipe:[280311]  

In which 280311 is pipe's kernel buffer size

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
4 [報(bào)告]
發(fā)表于 2006-06-05 11:33 |只看該作者
原帖由 Cygnus 于 2006-6-2 23:28 發(fā)表


1 -> pipe:[280311]  

In which 280311 is pipe's kernel buffer size

謝謝您的回貼!不過我還是有點(diǎn)懷疑,一個(gè)是:一個(gè)pipe需要2~3百K的buffer嗎?另外這個(gè)數(shù)字也會(huì)不斷增大。

評(píng)分

參與人數(shù) 1可用積分 +1 收起 理由
waker + 1

查看全部評(píng)分

論壇徽章:
84
每日論壇發(fā)貼之星
日期:2015-12-29 06:20:00每日論壇發(fā)貼之星
日期:2016-01-16 06:20:00每周論壇發(fā)貼之星
日期:2016-01-17 22:22:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-20 06:20:00每日論壇發(fā)貼之星
日期:2016-01-20 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-21 06:20:00每日論壇發(fā)貼之星
日期:2016-01-21 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-23 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-31 06:20:00數(shù)據(jù)庫(kù)技術(shù)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-01-14 06:20:00
5 [報(bào)告]
發(fā)表于 2006-06-05 18:11 |只看該作者
首先謝謝 woodie 的熱心回復(fù)!

SVR4實(shí)現(xiàn)了全雙工管道,并允許兩個(gè)文件描述符既可以被寫入也可以被讀取。
Linux采用了另外一種解決方法:每個(gè)管道的文件描述符仍然是單向的,但是在
使用一個(gè)描述符之前不必把另外一個(gè)描述符關(guān)閉。

that num may be pipe's fd(file descriptor)

[ 本帖最后由 yjh777 于 2006-6-5 18:52 編輯 ]

評(píng)分

參與人數(shù) 1可用積分 +1 收起 理由
waker + 1

查看全部評(píng)分

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2006-06-05 21:19 |只看該作者
原帖由 yjh777 于 2006-6-5 18:11 發(fā)表
... that num may be pipe's fd(file descriptor) ...


Oh no.

How about to run lsof to check what it is. Thanks.

[ 本帖最后由 Cygnus 于 2006-6-5 21:28 編輯 ]

評(píng)分

參與人數(shù) 1可用積分 +1 收起 理由
waker + 1

查看全部評(píng)分

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報(bào)曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
7 [報(bào)告]
發(fā)表于 2006-06-06 08:28 |只看該作者
美比是 pipe的kernel vfs vnode
不是說(shuō)一切皆文件么?

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2006-06-06 08:51 |只看該作者
原帖由 waker 于 2006-6-6 08:28 發(fā)表
美比是 pipe的kernel vfs vnode
不是說(shuō)一切皆文件么?


Don't guess !

PLEASE run lsof to get all needed information for pipes.
You may have to read some documents to understand the details
of lsof output for special objects such as socket, pipe, etc..

論壇徽章:
7
榮譽(yù)版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07獅子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10雙子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
9 [報(bào)告]
發(fā)表于 2006-06-06 09:45 |只看該作者
  1. r2007@www fd $ (ls -l /dev/fd/;lsof -d 0-9)|cat
  2. total 0
  3. lrwx------    1 r2007    users          64 Jun  6 08:46 0 -> /dev/pts/0
  4. l-wx------    1 r2007    users          64 Jun  6 08:46 1 -> pipe:[3273895]
  5. lrwx------    1 r2007    users          64 Jun  6 08:46 2 -> /dev/pts/0
  6. lr-x------    1 r2007    users          64 Jun  6 08:46 3 -> /proc/29222/fd
  7. COMMAND   PID  USER   FD   TYPE DEVICE SIZE       NODE NAME
  8. bash    22459 r2007    0u   CHR  136,0             802 /dev/pts/0
  9. bash    22459 r2007    1u   CHR  136,0             802 /dev/pts/0
  10. bash    22459 r2007    2u   CHR  136,0             802 /dev/pts/0
  11. bash    29220 r2007    0u   CHR  136,0             802 /dev/pts/0
  12. bash    29220 r2007    1w  FIFO    0,5         3273895 pipe
  13. bash    29220 r2007    2u   CHR  136,0             802 /dev/pts/0
  14. cat     29221 r2007    0r  FIFO    0,5         3273895 pipe
  15. cat     29221 r2007    1u   CHR  136,0             802 /dev/pts/0
  16. cat     29221 r2007    2u   CHR  136,0             802 /dev/pts/0
  17. lsof    29223 r2007    0u   CHR  136,0             802 /dev/pts/0
  18. lsof    29223 r2007    1w  FIFO    0,5         3273895 pipe
  19. lsof    29223 r2007    2u   CHR  136,0             802 /dev/pts/0
  20. lsof    29223 r2007    3r   DIR    0,2    0          1 /proc
  21. lsof    29223 r2007    4r   DIR    0,2    0 1915158536 /proc/29223/fd
  22. lsof    29223 r2007    5w  FIFO    0,5         3273915 pipe
  23. lsof    29223 r2007    6r  FIFO    0,5         3273916 pipe
  24. lsof    29224 r2007    4r  FIFO    0,5         3273915 pipe
  25. lsof    29224 r2007    7w  FIFO    0,5         3273916 pipe
  26. r2007@www fd $
復(fù)制代碼

根據(jù)以上的實(shí)測(cè)
pipe:[3273895]和lsof中的節(jié)點(diǎn)號(hào)是一樣的,難道是巧合?

論壇徽章:
1
榮譽(yù)會(huì)員
日期:2011-11-23 16:44:17
10 [報(bào)告]
發(fā)表于 2006-06-06 10:11 |只看該作者
cygnus的建議是對(duì)的,我也用lsof看了下。結(jié)果還是同意waker和r2007的看法,此處應(yīng)該是內(nèi)核vnode。
謝謝各位!
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP