您的位置: 首页 > 技术问答 > 如何在C中创建没有缓冲区的管道? 如何在C中创建没有缓冲区的管道? 分类: 技术问答 • 2022-05-19 09:08:47 问题描述: 我想创建没有缓冲区的管道,但我发现只有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
在Linux上,您可以使用['F_SETPIPE_SZ' fcntl](http://linux.die.net/man/2/fcntl)对其进行更改,但它总是舍入到至少一个页面大小,系统可以增加它,因为它认为合适。换句话说,使用该方法不可能有零。 – 2013-04-06 16:10:36
你的意思是无缓冲的或者可能是非阻塞的?在Linux上,请参阅man 7 pipe和O_NONBLOCK。这里也有对“PIPE_BUF”的解释。 – cdarke 2013-04-06 16:14:17
当然,无法创建没有缓冲区的管道是不可能的,因为管道实际上只不过是缓冲区而已。 – 2013-04-06 16:20:36