問題タブ [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 - パイプとフォークのトラブル
ファイルを検索し、その結果をパイプなどの他のコマンドに送信するプログラムを作成しています。ls | プログラムを実行しても何も起こらないと思います。問題は、読み取りを開始するために、親が SO バッファーへの書き込みを停止するのを子が待機していることです。これは、stdout に送信されるものであり、パイプが他のコマンドに送信する必要があるものです。
何が問題なのかわかりません。
c++ - execvp( command.argv[0], command.argv) 後にプログラムが停止する
コマンドを受け取って実行する小さなシェル プログラムを作成しています。ユーザーが無効なコマンドを入力すると、if ステートメントは -1 を返します。コマンドが正しい場合はコマンドを実行しますが、コマンドを実行するとプログラムは終了します。その後のコード行を実行しないというのは、何が間違っているのでしょうか? execvp( command.argv[0], command.argv) を ls および cat コマンドでテストしたので、うまくいくと確信しています。これが私のコードです。
c - grep で execvp() を使用するには?
C プログラム内で grep の呼び出しを exec() しようとしています。特定のファイル内の文字列パターンの出現回数を探しています。これは次の方法で実現できます。
次のように、期待どおりの数値出力が得られます。
しかし、私が同等であることを望んでいたことは、いくつかの問題を抱えているようです。次のコード:
結果:
2 つの問題があります。まず、番号が必要なだけです。それが見つかったファイルではありません。次に、-e フラグがファイルである必要があると主張しようとしている理由がわかりません。引数リストを次のように切り替えると:
それから私は戻ってきます:
なぜこれが起こっているのかをどこから探し始めればよいのかわかりません。また、コマンド ラインからの grep 呼び出しの出力が単なる数字である理由もわかりませんが、exec() を実行した grep 呼び出しはファイル名と数字の両方を出力します。
どんな助けでも大歓迎です!ありがとうございました。
編集:
解決策: 引数リストにプログラム名を含めるか、単に system() 呼び出しを使用します。また、RTFM.
c - execvpのargvパラメーターがconstではないのはなぜですか?
execvpは次のように定義されます。
これにより、このようなコードは使用できなくなります。
これは偶然の脱落でしたか?これを回避してconst_castするのは安全ですか?または、一部のexecvp実装は、実際にそのメモリに落書きしますか?
c - cのPATH環境内でアプリを検索
名前でcでアプリを実行しようとしています.実行前に、名前が合法かどうかを確認したい. c をチェックインして、アプリが PATH 環境に存在するかどうかを確認する方法はありますか?
ありがとう
c - Cシェルの構築。execvpは「そのようなファイルはありません」というエラーを返します。mallocを使用してオンザフライでargv配列を作成する
シェルを構築していますが、システムコール「execvp」で問題が発生しています。私はこのトピックに関する他のいくつかの質問を見ましたが、それらは曖昧であり、完全に対処されているようには見えませんでした(質問をした人は多くの情報を提供せず、良い答えを得ることができませんでした)。
明らかに、私は独自のコマンドラインを持っており、stdinからのユーザー入力を次のように読み取っています。
args配列をchar**として作成していますが、関数内の値を出力すると、配列自体が機能します(私は思います)。
したがって、プロセス内でforkとexecvp(cmnd、args)を呼び出します。ここで、cmndは「ps」であり、argsは上記のとおりであり、perrorなどです。
私は得る
$ PATH変数を入力する必要がありますか?私は何か他の奇抜なことをしていますか?
args配列を生成するための私のコードは次のとおりです。
(emallocとereallocは、エラーチェックが組み込まれたmallocとreallocです)
だから私はこれを行います:
そして、上で述べたように、プロセス内でexecvpが呼び出されると、引数を指定しても失敗しますが、引数がないと機能します(つまり、argv == {'ps'、NULL}の場合)。
さらに詳しい情報が必要な場合は、遠慮なくお問い合わせください。これを解決する必要があります。
c - fork()およびexecvp()
fork()
とを使用してプロセスを実行しようとすると問題が発生しexecvp()
ます。Pcb
引数の配列()を持つ構造体がありますargs
:
最初のものは実行されるプログラムの名前です。
そしてこれが私のフォーク機能です
注:process->args[0]
これは、現在のディレクトリにある「process」というコンパイル済みプログラムを参照する「process」というconst文字列です。
引数はありません。
gdbを使用して子プロセスに従うと、次のようになります。
なぜSIGSTPを受信しているのですか?
c - C - execvp() の 2 番目の引数
execvp() の 2 番目の引数で正確に何が行われますか?
arguments - execvp は引数を取得しません
私のコードは次のとおりです。
引数はchar* args[]
コマンドはchar* command
たとえばls -l
、コマンドは ls で、引数は -l ですが、実行後になぜ
execvp(command, args)
ls
not ls -l
??の結果しか得られません。
c - execvpから出力を受信するときに、パイプから適切な量のデータを読み取る
これは大きなプログラムのほんの一部ですが、execvpから出力を取得しようとしていますが、execvpを正しく設定しdup2
て、パイプに転送しています。私の問題は、パイプの全長を読み取るために読み取りを使用する場合にexecvp
発生します。毎回の出力の大きさはわかりません。入力によって異なる可能性があるためです。
読み取り用にいくつかの異なるサイズを試しましたが、それだけでは不十分であるか、最後にランダムなジャンクが発生します。stdioからpopenやその他のいくつかのものを使用できることはわかっていますが、割り当てにはそれらを使用しない必要があります。出力を取得するための他の方法のブランキング。
プログラム全体がサーバーの一部である、もう少し役に立たない情報。サーバーとクライアントを作成しています。サーバーを起動して、INETストリームを介してサーバーに送信するターミナルコマンドをクライアントに提供し、出力をクライアントに返送して、すべてstdioなしで出力を表示します。