在下面的代碼中,如果我不使用 重繪 緩沖區fflush(STDOUT),是否最終會FILE2同時獲得“Hello world 1”和“Hello world 2”,因為緩沖區可能會在程式結束時被重繪 ,并且可能是最后持有這兩個宣告?
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int FILE1 = dup(STDOUT_FILENO);
int FILE2 = open("HelloWorld.txt",O_WRONLY|O_CREAT,0666);
dup2(FILE1,STDOUT_FILENO);
printf("Hello World 1\n");
//THE LINE OF CONCERN
fflush(stdout);
dup2(FILE2,STDOUT_FILENO);
printf("Hello World 2\n");
close(FILE2);
close(FILE1);
return 0;
}
uj5u.com熱心網友回復:
問題是你在這里作業的層次不同。stdio 系統stdout將擁有自己的緩沖區,當您進行第二次dup2呼叫時,該緩沖區不會關閉或重繪 。stdout緩沖區的內容仍將保留并stdout在行程終止時關閉時寫入。
因此fflush需要呼叫來實際將stdout緩沖區重繪 到“檔案”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/335239.html
