2012-02-21 110 views
1

我正在學習系統類中的管道和外殼。我在搞strace。我正在運行一個名爲dpipe的程序。Pipe()系統調用

strace日誌,我看到以下內容:

pipe([3, 4]) 
pipe([5, 6]) 

什麼這些整數代表什麼?我在那個管道下基本上用shell來將一個命令的輸出路由到另一個命令的輸入,使用|。所以它只是讓我們的生活更輕鬆。在這種情況下,那裏的數字數組代表什麼?此外,如果piping僅用於shell,爲什麼會有C系統調用?這是完全爲那些想要編寫自己的shell(爲了讓自己的生活更輕鬆)而製作的嗎?

回答

1

Ignacio正確解釋了方括號中的數字是pipe()系統調用返回的兩個文件描述符。第一個是管道的讀取端,第二個是管道的寫入。

管道絕不僅僅被shell使用,儘管這可能是最常用的地方。但是,你有它倒退;外殼只能使用系統提供的系統調用,並且由於系統提供了pipe(),所以外殼能夠提供管道。如果沒有系統調用形式的o/s支持,shell將不可能提供管道符號。所有系統調用都可以讓程序員爲其客戶(他們編寫的軟件的最終用戶)提供服務。

+0

即使不支持管道系統調用或多任務,也可以實現管道式語義。 DOS command.com通過在啓動第二個命令之前將一個命令的輸出重定向到一個文件來完成它。 (這當然有影響和某些限制..) – 2012-02-21 03:26:25

3

它們是由pipe(2,3p)返回的文件描述符。有關更多詳細信息,請參閱pipe(2)手冊頁。

1

它們是文件描述符。並且管道不僅僅用在殼體中。管道可以通過任何程序完成,這是進程在Unix中交換信息的主要途徑。它不是什麼特殊的外殼。外殼只是一個正常的過程,使用戶可以輕鬆啓動其他過程。