c – 设置管道缓冲区大小

我有一个使用posix管道的C多线程应用程序,以便有效地执行线程间通信(所以我不必因为死锁而疯狂).

我设置了写操作非阻塞,所以如果缓冲区中没有足够的空间来写入,写入程序将会收到错误.

if((pipe(pipe_des)) == -1)
    throw PipeException();

int flags = fcntl(pipe_des[1],F_GETFL,0); // set write operation non-blocking
assert(flags != -1);
fcntl(pipe_des[1],F_SETFL,flags | O_NONBLOCK);

现在我想将管道缓冲区大小设置为自定义值(在特定情况下为一个字).

我已经google了,但我找不到任何有用的东西.有办法(可能符合posix)吗?

谢谢

洛伦佐

PS:我在linux下(如果可能有用)

解决方法

既然你提到你在Linux上,可能不介意不可移植性,你可能对文件描述符操纵器F_SETPIPE_SZ感兴趣,这可以从Linux 2.6.35开始.
int pipe_sz = fcntl(pipe_des[1],F_SETPIPE_SZ,sizeof(size_t));

调用之后会发现pipe_sz == getpagesize(),因为缓冲区不能小于系统页面大小.见fcntl(2).

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...