【问题标题】:How can stdin / stdout of unrelated & previously running processes be accessed?如何访问不相关和以前运行的进程的标准输入/标准输出?
【发布时间】:2019-05-27 00:07:44
【问题描述】:

给定两个程序 Program1.c 和 Program2.c,它们都作为自己不相关的程序/进程分别执行:

Program1 知道 Program2 的 PID,反之亦然。

两个程序必须使用什么 C 代码(不是 shell 命令)将它们的标准输入/标准输出链接到另一个标准输出/标准输入?

【问题讨论】:

  • 为什么不直接使用套接字?
  • 还是fifo/命名管道?
  • 您使用的是哪个操作系统?他们每个人都必须关闭现有的标准输入和输出,并打开双方同意的连接——可能是 Unix 域套接字。
  • 我对套接字了解不多,但知道管道对于本地进程间通信更有效/更快,基于快速谷歌。至于命名管道,我相信这就是 stdon/stdout 已经是什么,并且我宁愿使用已经存在的内容,而不是为每个单独的程序协调新的内容。相关问题似乎不是 C,我想在源代码中链接它们,而不是从 shell。至于操作系统,目标是 linux,但我在 windows 和 osx 上编码,所以,最通用的选项或每个操作系统的答案。有时它会在 arduino n 之类的东西上受到影响

标签: c pipe stdout stdin io-redirection


【解决方案1】:

这是不可能的(至少据我所知)。程序一结束,stdinstdout 的内存就会被释放。

【讨论】:

  • 您将/proc/self/fd//dev/pts/ 混淆了,窥探后者不会让进程进行通信,而只会访问相同的数据。
  • @o11c 问题是“以前运行的进程”。我应该保持“不可能……”吗?
  • 当然可以使用套接字、命名管道,甚至匿名管道 + 监听 /proc//fd/,但 OP 没有回答后续问题。
猜你喜欢
  • 2021-02-09
  • 1970-01-01
  • 2021-03-03
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2011-12-31
  • 1970-01-01
相关资源
最近更新 更多