如何在C中创建没有缓冲区的管道?

问题描述:

我想创建没有缓冲区的管道,但我发现只有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

如果您使用pipe创建了管道,那么除了系统缓冲区之外,您已经有了无缓冲的文件描述符。

setbuf仅适用于stdio文件,并且不会干扰,如果您使用普通系统文件描述符。

+0

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