2014-01-21 32 views
3

我正在編寫一個過濾器,並且正在探索編寫該程序的方法。我想知道這是否可能:從stdin輸入,寫入到stdout,但是重定向這個stdout,使得程序再次讀取生成的stdout,就好像它是stdin一樣,從而重新處理數據。我不希望將數據存儲在一個巨大的數組中 - 我只希望使用數據流完成此操作。這甚至有可能嗎? (如果沒有,那也可以。)另外,一個註釋:我只想在一個C代碼的源文件中做這個。是否有可能將標準輸出重定向到同一個程序?

+1

這是非常可能的,但怎麼做取決於你的系統(例如Windows或POSIX(如Linux,OSX))? –

+0

對不起,我只是添加了一個註釋:我只想使用代碼來完成此操作。我相信這可以通過Unix命令行上的管道來實現,但我想用純C來做這件事。 – pyrrhic

+2

@JoachimPileborg Windows有足夠的POSIX接口來做到這一點,不是嗎? – Potatoswatter

回答

1

是的,您可以在任何POSIX系統中爲自己創建pipe

但是沒有免費的午餐。如果你需要存儲數據,它必須去某個地方。管道由OS管理的緩衝區支持。

你可以從字面上將管道的兩端向後stdinstdout(如在勒夫的回答),但我建議不要說,因爲它會覆蓋程序通常的輸入和輸出通道。 (C或任何POSIX服務都不會「啓動」流,因此用戶可以看到它並在程序內部回顯)。

0

創建一個pipeDuplicate管道的讀端爲新的STDIN_FILENO,寫端爲STDOUT_FILENO,並且你已經完成設置。您現在寫入stdout的所有內容都將在stdin上提供。

相關問題