结论:管道容量是 65536 字节
验证如下:
/*
* Since Linux 2.6.11, the pipe capacity is 65536 bytes. from man 7 pipe
* Linux test28 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
*/
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
int main(void)
{
int fds[2], flags, count = 0;
if(0 != pipe(fds))
{
perror("pipe error");
exit(EXIT_FAILURE);
}
flags = fcntl(fds[1], F_GETFL);
/*
* 写端 fds[1] 默认是阻塞模式,现改为非阻塞
*/
fcntl(fds[1], F_SETFL, flags | O_NONBLOCK);
while (1)
{
if (-1 == write(fds[1], "A", 1))
{
perror("write error");
break;
}
count++;
}
printf("the pipe capcity is %d\n", count);
return 0;
}
/*
* write error: Resource temporarily unavailable
* the pipe capcity is 65536
*/