10/01/07 02:33:57 Nm3OilD9
>>265
シェルのリダイレクトは、実行するコマンドのプロセスのファイルディスクリプタを、
dup2 システムコールを使って、別のディスクリプタへ結びつける機能です
具体的には以下のようなコードに直接対応します
// > outfile 2>&1 の場合
int fd = open("outfile", O_WRONLY|O_CREAT|O_TRUNC, 0644); dup2(fd, STDOUT_FILENO); // > outfile
dup2(STDOUT_FILENO, STDERR_FILENO); // 2>&1
// > outfile 2> outfile の場合
int fd1 = open("outfile", O_WRONLY|O_CREAT|O_TRUNC, 0644); dup2(fd1, STDOUT_FILENO); // > outfile
int fd2 = open("outfile", O_WRONLY|O_CREAT|O_TRUNC, 0644); dup2(fd2, STDERR_FILENO); // 2> outfile
> outfile 2> outfile というのは同じ名前のファイルを独立に作って、それぞれが書き込むという意味になります
よって標準出力と標準エラーの両方を書き込むことはできません(そういう意味のコードに対応します)