2つのアプローチの違いは、どちらのプロセスが書き込み用にファイルを開き、ファイルを閉じるかだけです。したがって、プログラムの実行中にパフォーマンスの違いはありません。4つ(出力をstdoutに書き込む場合)ではなく、5つの(stdin、stdout、stderr、 "input"、および "output.txt")ファイル記述子が開いているという事実に違いはありません。
もちろん、プログラムがstdoutに書き込む場合でもファイルに書き込む場合でも、プログラムがまったく同じように動作するためには、ファイルへの書き込みもラインバッファリングする必要があります(stdoutへの書き込み時のデフォルトの場合と同様)。
このようsetvbuf()
に取得したファイル構造体を呼び出さない場合(のマンページから取得)、プログラムはブロックバッファリングを使用し、ほとんどの場合、これはstdoutへのリダイレクトよりも高速になります。fopen()
setvbuf(stream, (char *) NULL, _IOLBF, 0);
setvbuf()
したがって、プログラムがその出力にブロックバッファリングを使用することを許可されている場合、は./function input output.txt
より高速になります。(ただし、質問に関するコメントは有効です。実際のパフォーマンスを測定してください!)