linuxリダイレクト出力ファイル、満4 k出力1回問題


通常のコマンド実行結果のリダイレクトは、#command[option]>または>>filename;
このうち、'>'と'>>'の違いは、以前は元のファイルの内容をクリアしてから書き込むことであり、後者はファイルの後ろに追加され、元の内容がクリアされないことです.
1つのプログラムのprintなどの出力をリダイレクトする場合は、printfの後に出力のリフレッシュfflush(stdout)を追加する必要があります.そうしないと、出力はすぐにリダイレクトのファイルに書き込まれません.リダイレクト後の出力は4 K未満になってから1回のファイルに書き込まれます.以下のようにします.
  #include <stdio.h>
#include <stdlib.h>
int main( int argc, char ** argv )
{
while (1)
{
printf( "hello, world!
" ); fflush(stdout); sleep(2); } return 0; }

コンパイラ:gcc-o test test.c
リダイレクトの実行:./test > info
fflush(stdout)がない場合、ファイルinfoでは長い時間待ってから関連する出力情報(等出力情報が4 K未満)が表示され、fflush(stdout)がある場合infoを見るとすぐに出力情報が表示されます