簡體   English   中英

當將stdout重定向到該文件時,為什么printf()不輸出到文件?

[英]Why printf() does not output to a file, when stdout is redirected to that file?

以下是一個簡單的C程序:

#include <unistd.h>
#include <stdio.h>

int main(void)
{
        while (1)
        {
                printf("Hello World\n");
                sleep(1);
        }
}

編譯並運行它,“ Hello World ”將在終端上打印:

$ ./a.out
Hello World
Hello World
Hello World

但是,如果將stdout重定向到文件,則在運行一段時間后,該文件中仍然沒有任何內容:

$ ./a.out > log.txt
^C
$ cat log.txt
$

為什么printf輸出到stdout重定向到的文件?

僅對於終端,默認情況下是行緩沖區。 在這里,您將標准輸出重定向到文件。 因此,現在標准輸出未指向終端。 它指向一個文件。 對於文件,默認情況下已完全緩沖。 因此,您已經在寫入后刷新了標准輸出。

請參考該問題的答案。

正如@ js1所說,您必須在編寫后調用fflush(stdout)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM