在 Linux 运行时重定向 FIFO

Posted

技术标签:

【中文标题】在 Linux 运行时重定向 FIFO【英文标题】:Redirecting FIFO in runtime in Linux 【发布时间】:2017-01-24 14:10:30 【问题描述】:

我正在尝试使用 POSIX IPC 在 Linux 下的 C++ 中实现运行时可重新配置的 IPC。在当前配置中,我有一个进程 A 通过 FIFO 与进程 B 通信。进程 B 从 FIFO 中获取数据,进行一些修改并通过另一个 FIFO 将它们发送到另一个进程 C。这是一个图形表示:

然后,在运行时我想杀死进程 B,并能够允许进程 A 通过 B 和 C 之间的 FIFO 发送数据:

我该怎么做?

【问题讨论】:

关闭进程A中已有的FIFO,打开进程C使用的只写模式? 【参考方案1】:

如果你杀死一个进程,它打开的文件描述符都会被关闭。因此,如果您杀死 B,这将导致 C 看到 FIFO 上出现 EOF。但是,如果您有一个在 B 关闭后仍然存在的命名 FIFO,C 可以继续从与 FIFO 关联的文件描述符中读取,尽管它会立即连续返回EOF,直到另一端重新打开。

另一种选择是让 B 将其输出发送回 A,然后 A 将该输出转发给 C。这样,它将始终控制发送给 C 的内容,并且 C 不必担心其 FIFO 被关闭并且重新打开。

【讨论】:

是的,我已经通过这种方式解决了关闭程序和丢失描述符的问题。我的问题更多是关于是否有可能在不干扰进程 A 和 C 的情况下在两个 FIFO 之间建立软件链接(一种软链接)。我认为最好的解决方案是通知进程 A 进程 B 正在关闭并且使用它的 FIFO 成为 C 的一个。

以上是关于在 Linux 运行时重定向 FIFO的主要内容,如果未能解决你的问题,请参考以下文章

.NET 实现启动时重定向程序运行路径及 Windows 服务运行模式部署

RouterBrowser 不会在刷新时重定向到默认页面

Google OAuth Api 未在登录时重定向

反向代理后面的 .NET 6 OAuth 身份验证:质询时重定向 url 错误

Django - 如何在发送邮件时重定向

需要帮助在提交时重定向表单