2013-04-06 94 views
0

我想創建沒有緩衝區的管道,但我發現只有setbuf()函數只能用於文件描述符。你能提出類似於管道的東西嗎?如何在C中創建沒有緩衝區的管道?

+0

在Linux上,您可以使用['F_SETPIPE_SZ' fcntl](http://linux.die.net/man/2/fcntl)對其進行更改,但它總是舍入到至少一個頁面大小,系統可以增加它,因爲它認爲合適。換句話說,使用該方法不可能有零。 – 2013-04-06 16:10:36

+0

你的意思是無緩衝的或者可能是非阻塞的?在Linux上,請參閱man 7 pipe和O_NONBLOCK。這裏也有對「PIPE_BUF」的解釋。 – cdarke 2013-04-06 16:14:17

+2

當然,無法創建沒有緩衝區的管道是不可能的,因爲管道實際上只不過是緩衝區而已。 – 2013-04-06 16:20:36

回答

1

如果您使用pipe創建了管道,那麼除了系統緩衝區之外,您已經有了無緩衝的文件描述符。

setbuf僅適用於stdio文件,並且不會干擾,如果您使用普通系統文件描述符。

+0

雖然如果你想添加緩衝到管道,你可以使用['fdopen(3)'](http://linux.die.net/man/3/fdopen)和'setbuf'。 – 2013-04-06 16:23:17