問題タブ [dup2]

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 投票する
0 に答える
1692 参照

c - パイプを使用した execlp 複数のコマンド dup2 - c 言語

bash コマンド (一種のシェル プログラム) を実行する小さな C プログラムがあります。

ユーザーが次のようなコマンドを送信すると:

  1. ls -l | grep .[c,h]$ | トイレ –l

  2. ls

  3. エコー | ls

リンクされたリストデータ構造を使用することにしました。これが実行する関数です

今では、このコードは予測できない方法で動作しています。単一のコマンドでは動作し、サーバルでは動作する場合と動作しない場合があります....このコードブロックに何時間も費やしましたが、Googleはまったく役に立ちませんでした!!

いくつかのメモ:

  1. ユーザーが次のようなコマンドを送信した場合:

エコー|ls|123

戻りコードは COMMAND_ERROR マクロ定義になり、次のエラー メッセージが表示されるはずです。

123: コマンドが見つかりません

しかし、どういうわけか私のコードは「echo |」を実行します。ls' を実行し、最初の 2 つのコマンドの出力を表示します。その後、'123' コマンドのエラー メッセージが表示されます。また、いくつかの悪いコマンドの場合-最初に見つかったコマンドに対してのみエラーメッセージを表示することが想定されており、次のコマンドを実行し続けることは想定されていません...

このコマンドの場合:

ls -l | grep .[c,h]$ | トイレ –l

エンドレスループにストックされているようです....

  1. コマンド *c はリンクされたリストを保持し、リスト内の各ノードは 1 つのコマンドになり、各ノードはコマンドのすべてのパラメーターを保持する配列呼び出しパラメーターを保持します。例:

エコー 1234 | ls /ホーム

私が十分に明確で、私の問題をよく説明したことを願っています。どうもありがとうございました!

0 投票する
2 に答える
1458 参照

c - Cプログラミング2パイプ

プログラムに 2 つのパイプを設定したいと考えています。1 本のパイプは正常に動作していますが、2 本目のパイプをどこに配置すればよいかわかりません。

私のセットアップの擬似コードを以下に示します。

これが中括弧付きです。申し訳ありません

2 番目のパイプの位置が間違っているか、コードが完全に間違っています。

助言がありますか?

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

c - dup2 でソートを使用する

Linuxでこのdup2コマンドを試しています。私は次のようにコードを書きました:

私は、このプログラムが次のように動作することを期待しています: 子をフォークし、そのイメージを並べ替えプロセスに置き換える必要があります。また、stdin と stdout は dup2 コマンドに置き換えられているため、sort がパイプから入力を読み取り、出力を親によって出力される他のパイプに書き込むことを期待しています。しかし、ソートプログラムは入力を読み取っていないようです。コマンドライン引数が指定されていない場合、ソートは標準入力からそれを読み取りますか? 誰かがこの問題を手伝ってくれませんか。

どうもありがとう!

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

c - fork() を使用して C で哲学者を食事する

しばらく前に pthread を使用してダイニング哲学者問題の C プログラムを作成しましたが、現在、代わりに fork() を使用するように変更しようとしています。これは、私がすでに合格した講義の練習問題です。しかし、友人に助けを求められたのですが、自分では理解できないようで、気が狂いそうです!

「ps」を実行すると、プロセスがそこにあります。しかし、stdout への出力がないので、パイプに何か問題があると思います。

よろしくお願いします。

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

c - Dup2 を使用して入力と出力をリダイレクトする

C で Unix シェルを作成しており、入力と出力のリダイレクトを実装しようとしています。私はこれに Dup2 を使用しており、出力がファイルにリダイレクトされ、入力も正しくリダイレ​​クトされるようにすることができます。ただし、それが終わった後、再び Stdin と Stdout を使用するにはどうすればよいでしょうか?

これらは、リダイレクトが必要なときに実行するコードです。

の:

外:

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

c - C のマルチ パイプ (子供は読み取りを停止しません)

シェルのように複数のコマンドを実行するために、C でマルチパイプを実装しようとしています。「ls | grep src | wc」と入力すると、次のように表示されるリンク リスト (私のコードでは t_launch と呼ばれます) を作成しました。

wc -- パイプ -- grep src -- パイプ -- ls

すべての PIPE ノードには、pipe() 関数からの int tab[2] が含まれています (もちろん、PIPE ノードごとに 1 つの pipe() 呼び出しがありました)。

今、私はこれらのコマンドを実行しようとしています:

しかし、それは機能しません。コマンドが読み取りを停止しないようです。たとえば、「ls | grep src」と入力すると、grep コマンドから「src」が出力されますが、grep は読み取りを続行し、停止しません。「ls | grep src」と入力すると、grep src | wc"、何も出力されません。私のコードの何が問題なのですか?ありがとう。

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

c++ - dup2() は、子プロセスを早期に終了します

複数のパイプを実装する ac プログラムを作成していますが、dup2 が子プロセスを早期に終了させるため問題が発生しています。これが私のコードです:

コマンドを実行すると、最初のコマンドの結果が出力され、パイプ内の残りのコマンドを実行せずにプログラムが終了します。

dup2子プロセスが途中で終了 する理由についてのアイデアはありますか?