2013-03-28 74 views
0

我實現在C C預...如何有效管理中間輸出?

我有三個功能:

  1. 三字符替換功能
  2. 線拼接功能
  3. 評論刪除功能

然而,這些功能分別對文件起作用,即

第一個函數將生成一個文件並替換生成temp-file1的三元組作爲輸出

第二個函數將temp-file1作爲輸入,並拼接這些行並生成另一個temp-file2。

第三個函數將temp-file2作爲輸入並刪除註釋併產生另一個temp-file3。

現在主要的預處理任務將在temp-file3上執行,而.i文件將作爲最終輸出生成。

現在,我有3個選項:

  1. 使用臨時文件
  2. 使用管道
  3. ,而不是中間臨時-文件或管道使用字符串(即整個溫度-文件1,2和3將三大串!)

我有三個疑點......

  1. 選項1似乎效率低於選項2
  2. 選項2似乎是完美的,但是會受到該未命名管道大小的限制嗎? (因爲我有單個進程即功能1 2 & 3將被一個接一個地調用)如果臨時輸出大小>管道的總容量?
  3. 選項3 ...它是否有效,容易比前兩個?

請告訴我,我應該選擇哪個選項?

+0

通過管道連接的進程並行運行,而不是按順序運行。所以管道緩衝區的大小不成問題。 – Barmar 2013-03-28 04:31:52

回答

0

我相信選項2是如何實現一些C編譯器:C預編譯器管道到C編譯器,管道彙編器。管道緩衝區的大小不是問題,因爲這些進程並行運行,而不是順序運行。管道在生產者 - 消費者關係中實現傳統的FIFO隊列。

+0

其實我不關心編譯器和彙編器我只是實現預處理器(作爲一個經驗項目),函數1 2&3是預處理器的中間步驟...所以我需要管理它們中的每一個的中間結果在主預處理器程序中。並且這些函數按順序運行:) ...任何想法哪個選項去? – Sam 2013-03-28 04:39:27

+0

爲什麼不將它們實現爲線程,以便它們可以同時運行?如果不是,選項3可能是最好的。 – Barmar 2013-03-28 04:41:23

+0

其實我不知道C中的多線程雖然我知道使用fork的多處理......但是,我對選項3感到驚訝!因爲源文件可能非常大,所以有一個字符串很大很好嗎? – Sam 2013-03-28 04:44:39