問題タブ [execvp]
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.
c - execvp() からのエラー処理
からのエラーの処理方法について少し混乱していますexecvp()
。これまでの私のコードは次のようになります。
私が対処しようとしている 3 つのケースがあります。
myCommand,myArgumentVector
有効であり、コマンドが正しく実行されます。myCommand,myArgumentVector
は有効なパラメータですが、 の実行で問題が発生しmyCommand
ます。myCommand,myArgumentVector
無効なパラメータ (たとえばmyCommand
、見つからない) であり、execvp()
呼び出しは失敗します。
私の主な関心事は、親プロセスが子のエラーを正しく処理するために必要なすべての情報を持っていることですが、それを行う方法が完全にはわかりません。
最初のケースでは、プログラムは終了ステータス 0 で終了したと思われます。WIFEXITED(status)
つまり、マクロを呼び出すと、 true
. これはうまくいくはずだと思います。
2 番目のケースでは、プログラムはおそらく 0 以外の終了ステータスで終了しました。これは、呼び出した場合WEXITSTATUS(status)
、子呼び出しの特定の終了ステータスを取得する必要があることを意味しますmyCommand
(これが正しくない場合はお知らせください)。
3番目のケースは、私に多くの混乱を引き起こしています。したがって、execvp()
失敗した場合、エラーはグローバル変数に格納されますerrno
。ただし、このグローバル変数は子プロセスからのみアクセスできます。まったく別のプロセスとしての親は、それを見ることができないと思います。これは、電話する必要があるということexit(errno)
ですか? それとも、ここで何か他のことをしているはずですか?また、私が呼び出すと、親から戻るexit(errno)
値を取得するにはどうすればよいですか?errno
status
私の理解はまだ少し浅いので、私が探しているのは、これら 3 つのケースを処理する方法の理解の確認または修正です。
c - execvp で grep を実行し、パイプから読み取る
シェルコマンドラインの機能を模倣しようとしています:
子プロセスを作成し、その中で実行grep
し、親関数から環境変数を に接続されたパイプに書き込むことによってgrep
。ただし、これは機能しません。関数は、grep
私が書いたすべてのものを出力し続けます(私がどんな文字列をgrep
求めても)。これはコードです(エラーコードのチェックと処理を削除しました):
c - 一部のコマンドで execvp() によって開始されたプロセスが終了する
このコードを使用していくつかのシェルコマンドを実行していますが、コマンドの後に終了しますls
.: どこが間違っていますか?
linux - cでexecvpシステムコールを使用してバックグラウンドでプログラムを実行します
コマンド名と引数、およびオプションで最後に文字列「bg」を受け取るプログラムを書いています。「bg」文字列が渡された場合、プログラムはフォアグラウンドでない場合はバックグラウンドで引数を使用してコマンドを実行する必要があります。コード:
入力例:
私のコードは bg 引数が渡されていないときに機能しますが、渡されたときに "&" で置き換えようとしましたが、機能しませんでした。
c - if-else ステートメントで複数の execvp 呼び出しを使用するには?
端末のユーザー入力からコマンドを実行できるシェルを作成しています。履歴機能もあります。
現在、すべてが正常に機能しています。私が立ち往生している唯一の部分は、ユーザーが「!!」を入力した場合です。最新のコマンドが実行され、ユーザーが「! n」を入力すると、n 番目のコマンドが実行されます。ただし、実行すると、これらのコマンドを入力しても何も実行されません。
get_recent_command() および search_in_list_for_n() 関数は正しいコマンドを返していますが、これらの関数の結果を execvp() 呼び出しの「args[0]」の場所に配置しても、何も起こりません。
わからない。前もって感謝します!コマンドをリストに追加する前に、コマンドを null で終了しようとしましたが、それでも機能しませんでした。他に何ができるかわかりません... よろしくお願いします!
注: サイトから再利用されたリンク リスト コード: http://www.thegeekstuff.com/2012/08/c-linked-list-example/
c - execvp 呼び出しによって生成された gcc エラーをリダイレクトするにはどうすればよいですか?
現在、コマンド ラインから .c ファイルを自動コンパイルするプロジェクトに取り組んでいます。そのために、次のコードを使用します。
gcc に無効なパラメータ (無効なファイル名) を入力すると、gcc エラー メッセージが端末に出力されます。代わりにこのエラーをファイルにリダイレクトしたい場合、どうすればキャッチできますか?