假设我有三个C模块:
/dev/urandom
生成随机输出,它可以在没有其他两个模块的情况下独立工作。stdout
和stdin
控制它们。
模块需要在第三个模块的控制下通过流进行通信。
这是一种可能的情况吗?我发现Internet上的许多示例只是在C源文件之外定义一个函数,并在main函数中调用它。这种关系太弱了。我只是想知道我的上述情况是否可行。如果可能,它需要什么样的知识?答案 0 :(得分:0)
这是一种可能的情况吗?
是。考虑一下这样的事实,你可以输入如下命令:cat /dev/urandom | hexdump
,它完全按照你所描述的那样cat
是你的一个'模块'而hexdump
是另一个。在这种情况下,shell本身就是你的第三个模块,启动另外两个可执行文件并将它们绑在一起。
我只是想知道我的上述情况是否可行。如果可能,它需要什么样的知识?
您可以阅读API以启动流程,特别是如何配置其标准IO流。
在Linux上,例如,通常的方法是使用fork()
创建进程,execv()
加载“模块”,pipe()
以创建进程之间的连接,和dup2()
将这些连接放入正确的(stdio)位置。
Here's一个例子。
我发现Internet上的很多例子只是在C源文件之外定义一个函数,并在main函数中调用它。这种关系太弱了。
并不是说这是相关的,但我实际上称之为比你所说的更强大的关系。这使用系统链接器将两位代码绑定在一起。关于唯一更紧密的绑定是如果你没有使用函数并且只是一起编写代码。