2011-09-20 51 views
0

這是關於一個比賽的計劃。程序輸出可以通過程序本身重定向到管道嗎?

我正在提交一個程序&在總執行速度方面,我發現我的指標比最高得分者要慢。所有其他(頁面錯誤,內存...)是相似的。我發現當我在沒有使用printf(或寫入)的情況下運行我的程序時,我的總執行速度(在我自己的pc中測得)似乎相似。

的競爭將其輸出重定向評估輸出(帶有一個管道,我想)到文件&與他們匹配它的MD5 ....

我的問題是,有沒有以任何方式使用C東西,它不寫入輸出流,但管道仍然獲得輸入。或者我甚至可以把問題弄錯了。但無論如何,我正在修復。

我一直在優化算法,打動了我的腦袋。順便說一句,他們接受許多人試圖優化的makefile。對我而言,這兩個優化標誌都沒有奏效。我不知道還有什麼可以做的呢...

+0

'stdout'應該被緩衝,應該會產生相當低的開銷。你能否嘗試將'printf'調用改爲'sprintf'到緩衝區中,看看它是否仍然不好?另外,你的輸出是否需要格式化? – Hasturkun

+0

如果他們將輸出重定向到文件,爲什麼不按照他們的方式在外部執行?當你在linux中執行命令時,寫:'./program> my_output' – Shahbaz

+0

@Hasturkun。每個測試用例產生的輸出少於512個字符,512是我的緩衝區大小......你會建議什麼緩衝區大小,因爲我不知道測試用例的數量。 – loxxy

回答

0

如果您需要將輸出寫入到文件中的程序,你只需要:

  • 打開與int fd = fopen("/file/path", O_WRONLY);(您可能需要檢查的參數,它是一個很長的時間,因爲該文件我已經完成C編程),然後write(fd, ...);fprintf(fd, ...);
  • 用fopen打開文件,關閉標準輸出並使用dup2()將文件描述符複製到文件描述符編號1(即標準輸出)。
+0

我不需要寫入文件。我需要將它寫入stdout本身,因爲它們將它重定向到某個文件。我所知道的是,這個「寫入標準輸出」部分花費的時間太長了。 – loxxy

0

你可以嘗試管道fd上的fprintf。

+0

我不能有他們使用的管道的文件描述符,我可以嗎? – loxxy

相關問題