设置管道缓冲区大小

Zer*_*uel 14 c buffer pipe

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

我已将写操作设置为非阻塞,因此如果缓冲区中没有足够的空间来写,则编写器将收到错误.

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);
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

洛伦佐

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

Jer*_*man 14

既然你提到你在Linux上并且可能不介意不可移植性,你可能会对自Linux 2.6.35以来可用的文件描述符操纵器F_SETPIPE_SZ感兴趣.

int pipe_sz = fcntl(pipe_des[1], F_SETPIPE_SZ, sizeof(size_t));
Run Code Online (Sandbox Code Playgroud)

您将pipe_sz == getpagesize()在该调用之后找到,因为缓冲区不能小于系统页面大小.见fcntl(2).