問題タブ [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 からのセグメンテーション違反
ソケットから取得した入力を実行しようとしています。私はメッセージバッファを取得してに入れました.nullchar *[]
で終了しましls
たが、のようなパラメータでは機能しませんls -la
。
これが私の解析と使用execvp
です。
c - execvp と私。どうすればそれを機能させることができますか?
シェルを作成しましたが、system(1) を使用すると動作しますが、仕様にはそうではないと書かれています。最後に execvp を使用しようとしていますが、その方法がよくわかりません。助けていただければ幸いです。
コード ->
c - execvp() の前に、無視されたシグナルを SIG_DFL に設定します。
別のプログラムを開始するために fork() と execvp() を使用するライブラリを作成しています。私が理解しているように、execvX() は「カスタム」シグナル ハンドラを SIG_DFL にリセットしますが、無視されたシグナル ハンドラを SIG_DFL に設定しません。
これはライブラリであり、ユーザーがシグナルで何をするかを制御できないことを念頭に置いてください。無視されたシグナルのシグナル ハンドラを SIG_DFL に設定することをお勧めしますか?
もしそうなら、すべてのシグナルハンドラを一度に SIG_DFL に設定する方法はありますか? 代わりに、すべてのシグナル番号を反復処理する必要がありますか? この場合、最後の可能なシグナル番号を見つけるにはどうすればよいでしょうか? bits/signum.h に _NSIG があることを確認しました。これは POSIX の一定の部分ですか、それとも Linux 固有ですか?
ありがとう。
permissions - execvp 権限を拒否する
運が良すぎずに実行しようとしているメイクファイルがあります。これが何が起こるかです
私は作ろうとします、そしてそれは大丈夫です。その後、ファイルが見つからないというエラーが表示されます。ただし、問題なくファイルに対して ls -ld を実行できます。何が起こっているのか分かりますか?
更新しました
pgr@pgr:~/workspace/318/bootloader$ file createimage.given createimage.given: ELF 32 ビット LSB 実行可能ファイル、Intel 80386、バージョン 1 (SYSV)、動的にリンク (共有ライブラリを使用)、GNU/Linux 2.2 用。 5、剥がされていない
更新 2
c - cのfreopenとexecvp
私は c でマイナー シェルの実装を行っていますが、行き詰っています。
stdin
とをリダイレクトできるようにしたいのですstdout
が、混乱しています。私のシェルでは、プログラムを起動したいときにexecvp
関数を使用します。リダイレクトできるようにしたいstdout
ので、別のプロセスを実行すると、出力は画面ではなくファイルにリダイレクトされます。
サンプルコードは次のとおりです。
ただし、ファイルではなく端末に出力されます。
c - C で strtok を使用して入力を解析する
C で単純なシェルを作成する必要があるクラスで予定されているプロジェクトがあります。これを行うにはいくつかの方法があることは知っていますが、strtok を使用する必要があり、いくつか問題があるようです。
ここに私のコード全体があります:
これは、いくつかのコマンドからの出力です。
かなりうまく機能しているように見えるのは奇妙だと思いますcd
が、それ以外はあまり好きではありません。これは、後で何かがうまくいかないと私に思わせます (しかし、numArgs の printf の前に?)。また、参考までに、各コマンドは 15 個の引数または 256 文字を超えないように言われました。
これはしばらくの間私を苛立たせていたので、この特定の問題の助けがあれば素晴らしいでしょう (そこには他のエラーやコードの不十分なセクションがあることに気づきましたが、自分でそれらを見つけ出し/修正したいと思います)。どうもありがとう!:)
c - Cexecvpを呼び出す前にファイルの存在をテストする
私はubuntuでUNIXミニシェルを書いていますが、この時点で組み込みコマンドを追加しようとしています。組み込みコマンドでない場合はフォークしてから子が実行しますが、組み込みコマンドの場合は現在のプロセスで実行します。
したがって、ファイルが存在するかどうかを確認する方法が必要です(ファイルが存在する場合は組み込みコマンドではありません)が、execvpは環境PATH変数を使用してファイルを自動的に検索するため、事前に手動で確認する方法がわかりません。
では、名前を指定するだけで、引数をテストして組み込みコマンドかどうかを確認する方法を知っていますか?
みんなありがとう。
c - ファイルが存在しないのにexecvpが返されない
私はクラスのために小さなシェルを書いています。execvp
組み込みでないコマンドを要求します。これを開発するのにしばらくの間、それは-1で正常に戻り、すべてが正しかった。ただし、シェルには何でも入力できます。シェルはプロセスを開始し、ステータス11(SIGSEGV、セグメンテーション違反)ですぐに終了します。
メタ:これをSSCCEに切り詰めようとしましたが、失敗しました。周囲のすべてを削除するとexecvp
、正常に機能します。完全なソースを提供できてうれしいですが、750行を超えると、現時点では過剰に思えます。
execvpが呼び出される関数は次のとおりです。
これがparselineです。
c - ファイルをコピーするためのexecvpの代替手段、コピーが完了したら、通知してほしい
fork関数とexecvp関数を使用するcコードがあります。コードの目的は、コピーが完了したらsrc_fileをtarget_pathにコピーし、そのステータスをユーザーに通知することです(print msg)
execvpを使用すると、現在のプロセスイメージが置き換えられることを知っています。私が知りたかったのは、execvpに指定されたcmdが完了すると、コントロールが私のプログラムに戻り、後続のコードを実行するような代替手段はありますか。