[解決済み] C言語でdup2()は何をするのか
2022-03-05 21:49:28
質問
マニュアルで調べたのですが、まだよくわかりません...。
例えば、次のようなものがあるとします。
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);
関連
-
[解決済み】valgrind - サイズ8のブロックが割り当てられた後、アドレス ---- が0バイトになる。
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] 標準出力ではなく標準エラー出力にパイプを通すにはどうしたらいいですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】C言語におけるsize_tとは?
-
[解決済み】C言語の「static」関数とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】単項演算子「*」の型が無効(「int」がある)C言語でのエラー
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み】argv[]をint型として取得するには?
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】int型配列へのポインタのスカラ・イニシャライザの過剰要素
-
[解決済み】未定義参照 makefile が間違っているのかも?
-
[解決済み】makefile:4。*** missing separator. 停止する
-
[解決済み】警告:式の結果が未使用の場合