如何在命名管道 (mkfifo) 上执行非阻塞 fopen?
- 2024-11-14 08:30:00
- admin 原创
- 51
问题描述:
如果我有一个程序,它使用 mkfifo 创建并尝试打开一个命名管道,那么我该如何打开一个管道进行读写而不阻塞呢?
具体来说,我正在编写一个可以在有或没有 GUI 的情况下运行的 C 程序(用 Java 编写)。
在 C 程序中,我成功地使用 mkfifo 创建了命名管道,但是当我这样做时
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen 直到 GUI 打开该管道进行写入时才会返回。我希望做的是一旦 GUI 决定写入该管道,就准备好读取该管道 - 我将把文件描述符放在 select() 调用中。可以合理地预期 Java GUI 可能永远不会真正启动,所以我不能依赖它在任何特定点甚至根本无法打开管道的另一端。
我还会打开第二个管道进行写入,我想我会遇到同样的问题。此外,我无法在没有读取器的输出管道上设置 O_NONBLOCK。
有什么建议吗?
(这是在 Linux 系统上运行的)
解决方案 1:
你可以使用open()
管道O_RDONLY | O_NONBLOCK
,如果你想要 C 流,你可以使用 来获取它fdopen()
。但是, 可能存在问题select()
- 据我所知,一个打开用于读取但没有写入器的管道 fd 始终准备读取,并read()
返回 0,因此select()
会无限期地触发。
解决这个问题的一个笨办法是打开管道O_RDWR
;也就是说,至少有一个写入器(您的 C++ 程序)。无论如何,这都会解决您的问题。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD