假设我有三个 C 模块:
- 第一个功能是从
/dev/urandom
生成随机输出,它可以独立工作,无需其他两个模块。 - 第二个的功能是接受某种形式的输入并输出某种有用的信息,它也可以单独工作。
- 最后一个的作用是管理前两个模块,并通过
stdout
和stdin
连接、控制它们。 模块需要在第三个模块的控制下通过流进行通信。 这是可能的情况吗?我发现网上很多例子只是在C源文件之外定义一个函数,然后在main函数中调用它。这关系太弱了我只是想知道我的上述情况是否可能。如果可以的话,需要什么样的知识?
最佳答案
Is that a possible scenario?
是的。考虑一下您可以键入如下命令的事实:cat /dev/urandom | hexdump
,它的作用正是您所描述的 cat
是您的“模块”之一并且 hexdump
是另一个。在这种情况下,shell 本身是您的第三个模块,启动其他两个可执行文件并将它们的 io 绑定(bind)在一起。
I just wonder if my above scenario is possible. If possible, what kinds of knowledge does it need?
您可以阅读用于启动进程的 API,特别是如何配置其标准 IO 流。
例如,在 Linux 上,执行此操作的常用方法是使用 fork()
创建进程,execv()
加载您的“模块”,pipe()
创建进程之间的连接,以及 dup2()
将这些连接放入正确的(stdio)位置。
Here's一个例子。
I found that many examples on the Internet is just defining a function outside a C source file and call it in the main function. That's too weak relationship.
这并不相关,但我实际上称其为比您所说的更牢固的关系。这使用系统链接器将两段代码连接在一起。唯一更紧密的绑定(bind)是如果您不使用函数而只是一起编写代码。
关于c - 独立的 C 模块通过控制模块下的 stdin stdout 协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33427485/