2011-03-22 25 views
6

在Linux中(2.6.35-22-通用),man pipe指出POSIX:管道系統調用在FreeBSD的VS的Linux

管()創建一個管道,其可用於進程間通信的單向數據信道」

在FreeBSD(6.3-RELEASE-P5),man pipe指出

管道()系統調用創建一個管道,它是一個對象,允許雙向數據流,和ALLOCA測試一對文件描述符。「

一個是單向的,另一個是雙向的。我希望這不是一個愚蠢的問題,但是哪種方法是這樣做的標準方式?他們都符合POSIX嗎?

爲了使我的意圖明顯,我失去了考試的一些點,相信管()是一個方法,並正在尋找一些彈藥得到任何點回來,P

+0

我希望你能回覆你的觀點。這是一個愚蠢的事情來檢查。然而,一般的POSIX知識是一件值得研究的事情。 – 2011-03-22 01:57:43

回答

4

我開始說,這個是Greg的在第一個答案評論,但它發生,我認爲它更緊密地回答您的具體問題:

pipe()小號documentation in the POSIX standard明確指出有問題的行爲是「未指定」 - 也就是說,pipe()不是必須是雙向的,儘管它不是被禁止的。 Linux是單向的,FreeBSD是雙向的。兩者都是兼容的,只是實現了不需要的附加行爲(但不會破壞構建在兼容系統上的應用程序)。

可將數據寫入到文件 描述符法爾茲[1]和從 文件描述符法爾茲讀[0]。讀取 文件描述符fildes [0]將 訪問數據寫入文件 描述符fildes [1]在 先進先出的基礎上。未指定 是否fildes [0]也是 開放供書寫,並且fildes [1] 是否也開放閱讀。

我不會指望讓點回來(雖然你應該)。教授傾向於忽視現實世界而偏向於他們認爲是正確的事情。

+0

感謝您的回覆,POSIX規範的鏈接特別有用。 – Joseph 2011-03-22 01:19:30

3

FreeBSD man page for pipe在這一點上很清楚:

此實現管道的雙向性質是不能移植到較老的系統,所以建議使用約定在一個方向上使用管道時,在傳統的方式使用的端點。