【问题标题】:Independent C modules work together through stdin stdout under a control module独立的C模块在一个控制模块下通过stdin stdout协同工作
【发布时间】:2015-10-30 01:26:19
【问题描述】:

假设我有三个 C 模块:

  • 第一个功能是从/dev/urandom生成随机输出,无需其他两个模块即可独立工作。
  • 第二个的功能是接受某种形式的输入,输出某种有用的信息,也可以单独工作。
  • 最后一个功能是管理前两个模块,并将它们连接起来,通过stdoutstdin控制它们。 模块需要在第三个模块的控制下通过流进行通信。 这是可能的情况吗?发现网上很多例子只是在C源文件外定义一个函数,在main函数中调用。这关系太弱了。我只是想知道我的上述情况是否可能。如果可能,它需要什么样的知识?

【问题讨论】:

  • 您希望模块通过函数调用还是通过流进行通信?
  • 感谢您的评论!流。控制模块控制那些受控模块之间的那些流。

标签: c stream stdout stdin


【解决方案1】:

这是一种可能的情况吗?

是的。考虑一下您可以键入以下命令的事实:cat /dev/urandom | hexdump,它完全按照您的描述进行,其中cat 是您的“模块”之一,hexdump 是另一个。在这种情况下,shell 本身是您的第三个模块,启动其他两个可执行文件并将它们的 io 绑定在一起。

我只是想知道我的上述情况是否可行。如果可能,它需要什么样的知识?

您可以阅读用于启动进程的 API,尤其是如何配置其标准 IO 流。

例如在 Linux 上,通常的做法是使用fork() 创建一个进程,execv() 加载你的“模块”,pipe() 创建进程之间的连接,dup2() 放置这些连接到正确的(stdio)位置。

Here's 一个例子。

我发现网上很多例子只是在C源文件之外定义一个函数,在main函数中调用。关系太弱了。

这不是相关的,但实际上我认为这种关系比你所说的更牢固。这使用系统链接器将两个代码位联系在一起。唯一更紧密的绑定是如果您不使用函数而只是一起编写代码。

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多