C言語では、標準入力(stdin), 標準出力(stdout), 標準エラー出力(stderr)がプログラムの実行時に開かれます。
これらは、そのような入出力が固定されているわけではなく、
単にファイルディスクリプタが0, 1, 2のデバイスがそれぞれに対応しているだけです。
これは言い換えるとプログラム中で、ファイルディスクリプタの0, 1, 2番を切り替えることで
実行中でも動的に標準入出力を切り替えることを意味しています。
使用するヘッダファイル:
UNIX系: unistd.h (以下はopenを使用するために必要 sys/types.h, sys/stat.h, fcntl.h)
Windows系: io.h
ファイルディスクリプタの切り替えは、dupとdup2を用いることで行うことができます。
以下に例を挙げます。
Windowsでは、dup, dup2の代わりに_dup, _dup2という名前になります。
プログラム 1: int backup, fd;
2: backup = dup(1); // 標準出力のバックアップを作成しておく
3: fd = open("output.txt", O_WRONLY | O_CREAT); // 標準出力に割り当てるファイルを開く
4: dup2(fd, 1); // 先ほど開いたファイルのディスクリプタのコピーを1番に作成する
5: // この時点で標準出力はoutput.txtに切り替えられています
6: dup2(backup, 1); // 標準出力を元に戻す
7: close(backup); // 標準出力のバックアップを閉じる