2015-10-30 77 views
0

假設我有三個的C模塊:獨立的C模塊通過標準輸入標準輸出的控制模塊下一起工作

  • 第一個的功能是從/dev/urandom生成隨機輸出,它可以很好地工作獨立地不與其它兩個模塊。
  • 第二個功能是採取某種形式的輸入和輸出一些有用的信息,它也可以單獨工作。
  • 最後一個功能是管理前兩個模塊,並連接它們,通過stdoutstdin來控制它們。 模塊需要在第三個模塊的控制下通過流進行通信。 這是一種可能的情況嗎?我發現互聯網上的很多例子只是在C源文件之外定義一個函數,並在主函數中調用它。這種關係太弱。我只是想知道我的上述情況是否可能。如果可能的話,它需要什麼樣的知識?
+0

您是否希望模塊通過函數調用或通過流進行通信? –

+0

感謝您的評論!流。控制模塊控制這些受控模塊之間的流。 – Tamier

回答

0

這是一種可能的情況嗎?

是的。考慮一下這樣一個事實,即你可以輸入如下命令:cat /dev/urandom | hexdump,它的確如你所描述的那樣,其中cat是你的'模塊'之一,而hexdump是另一個。在這種情況下,shell本身就是您的第三個模塊,啓動其他兩個可執行文件並將它們的io綁在一起。

我只是想知道我的上述情況是否可能。如果可能的話,它需要什麼樣的知識?

您可以閱讀關於啓動進程的API,特別是如何配置其標準IO流。

在Linux例如這樣的常用方法是使用fork()創建進程,execv()加載了你的「模塊」,pipe()創建進程之間的聯繫,並dup2()把這些連接到正確的(標準輸入輸出)位置。

Here's一個例子。

我發現互聯網上的很多例子只是在C源文件之外定義一個函數,並在主函數中調用它。這是太弱的關係。

這不是說這是相關的,但我實際上稱之爲一種比你所說的更強的關係。這使用系統鏈接器將兩位代碼連接在一起。關於唯一更緊密的綁定將是,如果你沒有使用函數,只是把代碼寫在一起。

相關問題