問題タブ [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 - UNIXでユーザー入力を使用してCでexecvp()を使用しようとしています
ユーザーにコマンドを要求し、exec を使用してそのコマンドを実行するプログラムを作成しようとしています。
たとえば、「ls -la」と言われた場合、そのコマンドを実行する必要があります。私は次のコードを試しました:
ただし、次の実行を試みると、「セグメンテーション違反」が発生しました
何か案は?
c - execv、wait、Unixプログラミング、子を待つ方法
こんにちは私はUNIXシェルに取り組んでおり、2つの問題が発生しています。誰か助けてくれないかと思っていました。私の最初の問題は、シェルが子プロセスの終了を待機していないことです。子プロセスの実行中に、実際にさらにコマンドを入力することができます。私の2番目の問題は、次の2行にあります。シェルに何も表示されません。
ユーザーが入力したプロセスを実行するには、次の方法があります。つまり、firefox、ls-aなどです。
ここで、executeコマンドを呼び出します。正常に動作し、プロセスを起動しますが、終了するのを待ちません。
君たちは私が間違っているかもしれないことを知っていますか?いつもありがとうございます。これについて私を助けてくれてありがとう。
c++ - forkpty/execvp() でリダイレクトやその他の bash-isms を適切に処理するにはどうすればよいですか?
親 (GUI) プロセスが子プロセスの stdout/stderr 出力を読み取り、そのコマンドを子プロセスで実行するために forkpty() および execvp() を呼び出して、ユーザーからシェル コマンドを取得する GUI C++ プログラムがあります。 GUI に表示します。
これはすべてうまく機能します (Linux および MacOS/X で)。たとえば、ユーザーが「ls -l /foo」と入力すると、GUI は /foo フォルダーの内容を表示します。
ただし、出力リダイレクトなどの bash の詳細は処理されません。たとえば、ユーザーが「echo bar > /foo/bar.txt」と入力すると、子プロセスはテキスト「bar」をファイル「/ foo/bar.txt".
おそらくこれは、execvp() が実行可能コマンド「echo」を直接実行しているためであり、/bin/bash を実行してユーザーのコマンドをマッサージ/前処理に渡す代わりに実行されているためです。
私の質問は、ユーザーが bash プロンプトで文字列を入力したかのようにシステムを正確に動作させるために、使用する正しい子プロセス呼び出しは何ですか? /bin/bash -c the_string_the_user_entered のように、ユーザーのコマンドを /bin/bash 呼び出しでラップしようとしましたが、うまくいかないようでした。ヒントはありますか?
ps system() を呼び出すだけでは、子プロセスが終了するまで GUI がブロックされ、一部の子プロセスが長時間終了しない可能性があるため、適切なオプションではありません (存在する場合)。
c - コントロールは「execvp()」の後に戻りますか?
「execvp()」は、現在のプログラムを実行予定のプログラムに置き換えます(もちろん同じプロセスコンテキストで)。したがって、たとえば、execvp()の後にprintf()を呼び出すと、機能しなくなります。それはドキュメントが言っていることであり、私もそれを検証しました。
しかし、なぜ_exit()が必要なのですか..?コントロールがexecvp()の後にステートメントに戻るということは起こりますか?
どんなポインタにも感謝します。
ありがとう
c - char ** nargv は空ですが、理由はわかりません
私は非常に簡単なことをしようとしています: C の execvp 呼び出しで使用したい引数を char** に入力します。
これが私がやっている方法です:
出力は私に与えます:
これは問題ないようです (nargv は正しく入力されています。少なくとも私はそう考えていました)> しかし、execvp("command",nargv) を実行すると、引数が渡されません。どうしたの ?私はgdbで遊んでみましたが成功しませんでした。
よろしく
c - メインでexecvpを待っています
- cmdName引数とcmdParam引数を正しく渡したとすると、main()の実行を再開する前に、execvpによって作成されたプロセスが終了するのをどのように待つのですか?
- execvp()は、新しくfork()されたプロセスの子であるプロセスを作成しますか?
shell - C - 不明なコマンドを execvp() に渡す
私は、子プロセスを作成してから execvp() を呼び出す偽のシェルを作成しています。通常のシェルでは、'hello' などの不明なコマンドを入力すると、'hello: Command not found.' が返されます。ただし、hello を execvp() に渡すと、デフォルトではエラーは返されず、何も起こらなかったように残りのプログラムを実行し続けます。実際に何も実行されていないかどうかを確認する最も簡単な方法は何ですか? ここに私のコードがあります:
死体 < 0 の場合、それは未知のコマンドであることはわかっていますが、待機したくない場所 (コマンドの最後に & が入力された場合など) がリストされていないコード内の他の条件があります。助言がありますか?
c++ - execvp()がEXC_SOFTWAREと奇妙なcin.getlineループを引き起こしていますか?
Mac OSX10.6.6とXCode3.2.4でいくつかのコードを実行していて、かなり標準的なコードがあります:fork()、pid == 0の場合、コマンドとargsを含むexecvp(argsにはコマンドが配列の最初の要素であり、配列はnullで終了します)。
これについては、オペレーティングシステムのクラスで説明します。割り当ては、単純なシェルを作成することです。リダイレクト(<と>)とパイプ(|)の両方の引数とスイッチを使用してコマンドを実行します。いくつか問題が発生しています。
1)デバッグ中にEXC_SOFTWARE信号を受け取ることがあります(これまでのところ、XCodeの外部でアプリを実行した場合は取得できませんが、Macを初めて使用するため、実行した場合にどのようになるかわかりません)
2)次のコマンドのgetlineが、他のcoutによって出力されたように見えるジャンクになることがあります。これは永遠にループし始め、指数関数的に壊れます。私はすべてのプロンプトでgetpid()を印刷してテストしましたが、最初のプロセスだけがこれらを印刷します。偶発的な「フォーク爆弾」はないようです。
これが私がこれまでに持っているものです:
それはまさに私が持っているものです、あなたはカット、ペースト、そしてビルドすることができるはずです。
私はC++が得意ではありません。削除しないとメモリリークが発生する可能性がありますsplit
が、主な焦点はEXC_SOFTWAREシグナルであり、ループの問題で何が間違っているかを確認します。何かご意見は?
編集:
割り当てに必要なエラーチェックは非常に限られており、すべての入力が正しいと想定しています。正しいとは、アプリがコマンドを実行するために適切にフォーマットされ、制限されていることを意味します。つまり、奇妙なスペースカウント、非同期を実行する&、マルチパイピングコマンドなどはありません。
c - 基本的なシェルを構築します。具体的には、execvp()を使用します。
私のプログラムでは、ユーザー入力を受け取り、それを2dchar配列に解析しています。配列は次のように宣言されます。
そして、fgetsを使用してユーザー入力を取得し、sscanfで解析しています。これはすべて、私が思うように機能します。
この後、parsedTextをexecvpに渡したいので、parsedText [0]にパスが含まれている必要があり、引数が指定されている場合は、parsedText[1]からparsedText[10]にある必要があります。
execvp(parsedText [0]、parsedText [1])の何が問題になっていますか?
おそらく言及する価値のあることの1つは、引数なしで「ls」などのコマンドを指定するだけで、問題なく機能するように見えることです。
これが私のコードです: