c - 了解管道/FIFO 是否已满

标签 c pipe named-pipes systems-programming

我有一个作为 RDWR(用于通信进程-进程)和管道(进程-线程)打开的 fifo,我如何理解何时达到管道或 fifos 限制?当我尝试写入超过 64 KB 时,它只是在 write() 中等待。

最佳答案

您需要使用非阻塞模式:

pipe2(fds, O_NONBLOCK);

或者,如果您需要在创建管道后执行此操作:
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);

现在,当您读取或写入并且操作无法立即完成时,它将返回。然后您可以使用 select()poll()找出何时可以再次读取或写入(或者您可以只是忙等待)。

关于c - 了解管道/FIFO 是否已满,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37089619/

相关文章:

c - 计算质因数时如何缩短执行时间

Python:同时使用 os.fork()、os.pipe() 和 subprocess.Popen 问题

linux - 控制文件描述符的准备情况

c++ - Node.js:使用带有 exe 程序的 SPAWN 分割标准输出

angular - 如何使用 Electron 和 Angular 与NamedPipe连接

c - c 中的嵌入式 perl - 对于 perl_run() 执行的脚本是否有 "runitme error"的标志?

C - 如何通过 C getline 函数正确使用 malloc 数组?

objective-c - 在 Objective C 中使用指针的最大优势是什么

c - setuid 程序的管道访问权限

java - Java Process builder手动管道