#include <stdio.h>
int main(){
char a[2] = {0};
a[0] = 't';
printf("%s", a);
scanf("%c", a);
return 0;
}
scanf這里將導致標準輸出的自動重繪 。運行a.out會t在運行 scanf 之前在終端上列印,更多資訊:在執行 scanf 之前printf 是如何被重繪 的?
但是,執行a.out > out.txt和終止它^C不會在內部列印任何內容,out.txt但輸出仍然出現在螢屏上,而不會使用>.
如果 stdout 正在重繪 ,那么為什么out.txt仍然是空的?如果它沒有被沖洗,那么t在第一個例子中是如何出現在螢屏上的?
(我知道使用\n或手動重繪 或正確終止程式將解決問題,我只是對這種行為感到好奇)。
uj5u.com熱心網友回復:
關鍵是“互動”這個詞:
互動設備的輸入和輸出動態應按照 7.21.3 的規定進行。
一旦您將輸出重定向到檔案,它就不再是互動式的。
例如,Linux C 標準庫實際上執行isatty庫呼叫的模擬來解決這個問題。如果它發現標準輸出沒有定向到檔案,它也會破壞這種關系。它還將提高作為命令管道一部分作業的程式的 I/O 性能。
您可以stdout通過執行自己測驗是否連接到終端
#include <unistd.h>
printf("stdout is connected to a terminal: %d\n", isatty(fileno(stdout)));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327456.html
標籤:C
上一篇:佇列串列C程式有效,但只顯示它應該顯示的變數中的1個
下一篇:在C中列印UTF-8后未顯示文本
