gpt4 book ai didi

python - 防止文件描述符在 POSIX 系统上关闭

转载 作者:太空宇宙 更新时间:2023-11-03 15:26:17 25 4
gpt4 key购买 nike

有一个库(libvte,一个终端仿真库)使用一对文件描述符作为 pty 主/从对。我需要能够从库中“窃取”master fd 供我自己使用(以便在非常罕见的情况下实现对 ZMODEM 的支持,因为我必须通过终端连接到“网络”)。但是,有一个问题。

您可以告诉 libvte 您想要将文件描述符更改为一个新的,但随后它会尝试关闭它正在使用的 master,并开始使用新的。这是行不通的,因为当主人关闭时,奴隶就会消失。最初,我认为可以在 pty master 上使用 dup(),这样当 libvte 在 PTY master 上执行 close() 时,我仍然有一个可用的 fd 可以使用。这显然是错误的。

我需要找到一种方法来:

  • 阻止 libvte 对 fd 的 read() 操作。
  • 从 libvte 中窃取 fd,直到我使用它(例如,直到我将它连接到的 rz 进程退出)

在 POSIX 系统上是否可以做这些事情中的任何一个?还是有其他方法可以在不修补 libvte 本身的情况下完成同样的事情?我问的原因是该解决方案必须在相当多的现有系统上运行。

如果它完全相关,我将通过 Python 与 libvte(和 GTK+ 本身)进行交互。但是,我并不反对用 C 语言编写一个 Python 扩展,然后我可以从 Python 程序中调用它,因为您不必在任何系统上都具有特权即可加载 Python 扩展。

如果这一切都不可能,我可能会被迫 fork libvte 来做我想让它做的事,并将其与我的程序一起分发,但我不想那样做——我不想成为坚持维护 fork !

最佳答案

一个可能的解决方案是编写一个辅助进程,它打开自己的 pty 主/从对,并插入 libvte 和在从属 pty 上运行的实际目标程序:

+---------------+
| libvte |
| |
| pty master=|-----\
+---------------+ |
|
+---------------+ |
| helper proxy | |
| | |
| stdin/stdout=|-----/
| |
| pty master=|-----\
+---------------+ |
|
+---------------+ |
| target | |
| | |
| stdin/stdout=|-----/
+---------------+

您的辅助进程通常只传递数据,直到它看到 ZMODEM 流量。然后它停止将数据传递给 stdin/stdout(在 libvte 结束),而是通过单独的文件描述符将其传递给您的应用程序,甚至只是调用 rz 本身。

关于python - 防止文件描述符在 POSIX 系统上关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com