問題タブ [dup]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
133 参照

c++ - dup はリダイレクトしません

stdout をファイルにリダイレクトするコード (ls の結果がファイルに返されるなど) を書いていますが、dup2() 関数は出力をリダイレクトしません。これが私が持っているコードです:

そして、これは機能しません。ls の出力を端末ウィンドウに表示するだけです。dup2() が実際に -1 ではなく 1 を返したことを確認するための手順を実行しました。

0 投票する
1 に答える
333 参照

c - fork、pipe exec、および dub2

このコードは、「'ls -l' からの出力:」を出力し、'ls -l' の結果を追加することになっていますが、そうではありません。

0 投票する
1 に答える
503 参照

c - fork() が dup2() によってファイル記述子の 1 つを閉じる理由

dup2() を理解するためのコードを書きました。

lsof は 2 つの開いているファイル記述子を示しています (/workspace/source/throw.cpp は渡された引数です)

しかし、私はそれを 2 つのプロセス (以下のコード) に fork() しますが、開いている /workspace/source/throw.cpp は 1 つだけです。

  1. 質問 1: dup()d fd が閉じられた原因は何ですか?
  2. 質問 2: マニュアルで FD_CLOEXEC を調べましたが、fcntl() で設定しないでください。fopen() は自動的に設定しますか? このフラグは fork だけでなく exec ファミリにも影響しますか?
  3. 質問 3: dup2 を dup に置き換えた後、結果は予想どおり 2 fds を示しています。マニュアルが言ったように:

    「dup2() は newfd を oldfd のコピーにし、必要に応じて newfd を最初に閉じます」。

    newfdがすでに開いている場合、dupの前にnewfdを閉じることを意味しますか?

0 投票する
1 に答える
671 参照

c - ソケット経由の execvp 出力のストリーミング

この質問が何十億回も聞かれていることは知っていますが、すべての解決策がうまくいくわけではありません。をソケット経由でクライアントにストリーミングする必要がありstdoutます。execvp関連するクライアントコードはこれです

この質問の回答をコピーしようとしました。ただし、次のコードを試しても何も返されません。

接続が正しく確立されていることをトリプルチェックしました。execute_cmdシンプルに置き換えるとwrite、クライアントは答えを正しく出力します。しかし、上記のコードを実行しても何も起こりません。バイトが返されません。呼び出しを削除しましたが、dup2呼び出しからの出力もありませんexecvp

ここでかなり必死になって、pipe私が見つけたものは何でも試してみました。どこで私は間違えましたか?コマンド自体も問題なく、シェルで動作し、execvp呼び出しはエラーをスローしません。

0 投票する
1 に答える
379 参照

linux-kernel - 真のファイル記述子のクローン

ディスクファイルの場合のように、可能な場合に真のファイル記述子クローンメカニズムがないのはなぜですか。

POSIX:

これらのシステム コールの 1 つから正常に戻った後、古いファイル記述子と新しいファイル記述子を交換可能に使用できます。これらは同じオープン ファイル記述 (open(2) を参照) を参照するため、ファイル オフセットとファイル ステータス フラグを共有します。たとえば、記述子の 1 つで lseek(2) を使用してファイル オフセットを変更すると、もう一方のオフセットも変更されます。

ウィンドウズ:

複製ハンドルは、元のハンドルと同じオブジェクトを参照します。したがって、オブジェクトへの変更は両方のハンドルを介して反映されます。たとえば、ファイル ハンドルを複製した場合、現在のファイル位置は両方のハンドルで常に同じになります。ファイル ハンドルが異なるファイル位置を持つようにするには、CreateFile 関数を使用して、同じファイルへのアクセスを共有するファイル ハンドルを作成します。

クローン プリミティブを使用する理由:

  • ファイル アーカイブを操作する場合、アーカイブ内の各ファイルに個別にアクセスできる必要があります。ファイル アーカイブは、仮想ファイル システムのように動作する必要があります。

  • ファイルタイプのチェック。ファイル オフセットのクローンを作成できるため、元の位置に影響を与えることなく、ファイルのごく一部を読み取ることができます。

0 投票する
0 に答える
173 参照

c - コマンド配列によるパイピング

文字列の配列と配列のサイズを取る関数があります。文字列をコマンドと引数にトークン化し、コマンドを 1 つずつフォークして実行するループがあります。コマンドごとに、出力を次のコマンド入力にパイプする必要があります。dup/close 呼び出しが正しいかどうかは完全にはわかりません。どんな助けでも大歓迎です。配列にコマンドが1つしかない場合はパイプしないように設定しています。

0 投票する
1 に答える
189 参照

ruby - Ruby オブジェクト ID、複製、可変性

Rubyで次の懸念に遭遇しました

だから、私はこれについてある程度理解しています。aで配列への参照を保持しますobject_id

bbは、その を参照するポイントとしてa、その同じ位置への参照も持っていobject_idます。基本的には同じものを指します。したがって、何かを変更するとbaも変更されます。

この動作はどのカテゴリに分類されますか? これに関連して将来エラーが発生しないように、記憶できる読み物/一般的な慣行はありますか? 私はそれa.dupが別の場所に新しいオブジェクトを提供することを知っているa.dup == bのでtrue. にもa.dup.object_id == b.object_id

また、浅い対深いに関係なく、この状況では本質的に同じことですかdup?clone

0 投票する
1 に答える
413 参照

c - c 重複未定義エラー

2 つの子プロセスを作成しようとしています。

1 つの子は、引数として渡されたファイルから入力を読み取り、出力をパイプに書き込みます。

もう 1 つの子はパイプから出力を読み取り、その出力をファイルに書き込みます。これも引数として渡されます。

親は子のファイル記述子の一部を設定し、子が作成されると、必要に応じて記述子の操作を終了します。

ただし、ファイル記述子の設定に問題があります。具体的には、入力ファイル記述子を閉じて複製して標準入力の代わりに使用しようとすると、問題が発生します。

ここにすべての私のコードがあります:

これをMINIX3でコンパイルして実行しています。

プログラム出力を含め、実行方法は次のとおりです。

どんな助けでも大歓迎です。