マニュアルページで調べましたが、まだわかりません...
あなたが持っているとしましょうdup2(f1,0)
。filedesc.1 を stdin に切り替えてから、stdin をロックしますか?
マニュアルページで調べましたが、まだわかりません...
あなたが持っているとしましょうdup2(f1,0)
。filedesc.1 を stdin に切り替えてから、stdin をロックしますか?
dup2
ファイル記述子を切り替えません。それらを同等にします。の後dup2(f1, 0)
、記述子で開かれたファイルはすべてf1
、記述子 0、つまり標準入力でも (同じモードと位置で) 開かれます。
ターゲット ファイル記述子 (ここでは 0) が開いていた場合は、dup2
呼び出しによって閉じられます。したがって:
before after
0: closed, f1: somefile 0: somefile, f1:somefile
0: otherfile, f1: somefile 0: somefile, f1:somefile
ロックは関与しません。
dup2
標準のファイル記述子から読み書きするプログラムの一部がある場合に(とりわけ)役立ちます。たとえば、 はsomefunc()
標準入力から読み取りますが、プログラムの残りの部分が標準入力を取得する場所とは別のファイルから読み取りたいとします。次に、次のことができます(エラーチェックは省略されています):
int save_stdin = dup(0);
int somefunc_input_fd = open("input-for-somefunc.data", O_RDONLY);
dup2(somefunc_input_fd, 0);
/* Now the original stdin is open on save_stdin, and input-for-somefunc.data on both somefunc_input_fd and 0. */
somefunc();
close(somefunc_input_fd);
dup2(save_stdin, 0);
close(save_stdin);