有沒有辦法將stdout設置爲二進制模式?在哪種模式下stdout沒有任何操作,從我的調試問題,我認爲它是文本模式,這是真的嗎?有沒有辦法將stdout設置爲二進制模式?
我試圖函數:
freopen(NULL,"wb",stdout)
,但我的計劃是崩潰,當我這樣做。
有沒有辦法將stdout設置爲二進制模式?在哪種模式下stdout沒有任何操作,從我的調試問題,我認爲它是文本模式,這是真的嗎?有沒有辦法將stdout設置爲二進制模式?
我試圖函數:
freopen(NULL,"wb",stdout)
,但我的計劃是崩潰,當我這樣做。
我嘗試下面的代碼提交給設置stdin和stdout爲二進制模式(在Windows上):
#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
#endif
...
#ifdef _WIN32
setmode(fileno(stdout),O_BINARY);
setmode(fileno(stdin),O_BINARY);
#endif
在Linux下你不能這樣做,因爲在這個平臺上的二進制和文本模式是一樣的東西。
這可以工作。你可以通過做 fwrite(「a \ nb」,1,3,stdout)來測試它。 如果生成的文件是3個字節,則stdout是二進制的。如果沒有上面的setmode()調用,你最終會得到一個4字節的文件。 –
簡單的答案是否定的。該模式在iostream對象被構建時確定,並且以後不能更改。有些實現可能會提供稍後執行的手段,但這不是標準化的。在一些實現中,在stdout
上執行freopen
可能會改變模式,儘管我認爲這是正式的,但這在C++中是被禁止的。 (它是在C中定義的實現)顯然,它不適用於你的實現。
你最好打賭是找出你的系統如何命名控制檯設備(Unix下的"/dev/tty"
;我認爲在Windows下),打開它以所需的模式輸出。
只需'CON'而不是'CONS',但這不可能有所幫助 - 在需要二進制輸出的情況下,所述輸出不太可能會轉到控制檯。你可能甚至不會擁有一個控制檯。 (最典型的場景是一個CGI腳本,例如,爲Web服務器動態生成JPEG。) –
爲什麼? 'stdout'應該與文本終端兼容。根據當前語言環境獲取文本語義。 (請注意,C和C++有不同的語言環境系統,並且您需要採取積極措施使庫語言環境與操作系統語言環境匹配。) – Potatoswatter
如果您需要'二進制模式'省略格式化輸出 - 堅持未格式化輸出 –
出於何種目的?聽起來像個壞主意...... – tenfour