c – 设置管道缓冲区大小

c – 设置管道缓冲区大小,第1张

概述我有一个使用posix管道的C多线程应用程序,以便有效地执行线程间通信(所以我不必因为死锁而疯狂). 我设置了写 *** 作非阻塞,所以如果缓冲区中没有足够的空间来写入,写入程序将会收到错误. if((pipe(pipe_des)) == -1) throw PipeException();int flags = fcntl(pipe_des[1], F_GETFL, 0); // set w 我有一个使用posix管道的C多线程应用程序,以便有效地执行线程间通信(所以我不必因为死锁而疯狂).

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

if((pipe(pipe_des)) == -1)    throw PipeException();int flags = fcntl(pipe_des[1],F_GETFL,0); // set write operation non-blockingassert(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 – 设置管道缓冲区大小全部内容,希望文章能够帮你解决c – 设置管道缓冲区大小所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1235665.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存