我正在使用异步管道进行进程间通信(我删除了错误检查以简化)
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增加管道内部缓冲区大小?如果是的话,怎么做?
答案 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,对于任何疯狂的管道需求来说应该足够了