1

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

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

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

4

3 回答 3

1

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

于 2012-05-22T20:29:20.957 回答
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,对于任何疯狂的管道需求来说应该绰绰有余

于 2013-04-24T22:15:56.510 回答
0

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

于 2012-04-30T12:36:02.427 回答