增加CentOS上的管道内部缓冲区大小

时间:2012-04-29 21:34:22

标签: c linux multithreading ipc pipe

我正在使用异步管道进行进程间通信(我删除了错误检查以简化)

int pipe_fd[2];
pipe(pipe_fd);
int fdflags = fcntl(pipe_fd[1], F_GETFL, 0);
fdflags |= O_NONBLOCK;
fcntl(pipe_fd[1], F_SETFL, fdflags);

我正在寻找一种增加管道内部缓冲区大小的方法。 我知道可以使用Kernel> = 2.6.35 通过以下方式:

fcntl(fd, F_SETPIPE_SZ, size);

或写信至:

/proc/sys/fs/pipe-max-size

但我正在使用Kernel 2.6.18开发CentOS 5。 是否可以使用内核2.6.18增加管道内部缓冲区大小?如果是的话,怎么做?

3 个答案:

答案 0 :(得分:1)

在CentoS 5的内核上,管道固定为64 KB

答案 1 :(得分:0)

除非您只想在C代码中执行此操作,否则一个选项是在设置限制后运行程序的包装器shell脚本中使用ulimit -p。

答案 2 :(得分:0)

/proc/sys/fs/pipe-max-size sets the limit for fcntl F_SETPIPE_SZ

只是改变/proc/sys/fs/pipe-max-size没有任何区别 ulimit -p也没用了

您必须实际使用fcntl F_SETPIPE_SZ

从我看到的pipe-max-size默认值为1MB,对于任何疯狂的管道需求来说应该足够了