問題タブ [execv]
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 - Cで独自のUnixシェルを作成する-PATHとexecvの問題
私はCで独自のシェルを作成しています。ユーザーの現在のディレクトリを表示し、フルパスに基づいてコマンドを実行し(execvを使用する必要があります)、ユーザーがcdでディレクトリを変更できるようにする必要があります。
これは宿題です。先生は私たちにCの基本的な入門書と、プログラムがどのように機能するかについての非常に簡単な骨組みだけを教えてくれました。私は簡単に諦める人ではないので、これを行う方法を3日間研究してきましたが、今は困惑しています。
これは私がこれまでに持っているものです:
- ユーザーのユーザー名、コンピューター名、および現在のディレクトリ(デフォルトはホームディレクトリ)を表示します。
- ユーザーに入力を求め、入力を取得します
- ユーザーの入力を「」で引数の配列に分割します
- 環境変数PATHを「:」でトークンの配列に分割します
ここから先に進む方法がわかりません。execvコマンドを使用する必要があることはわかっていますが、Googleでの調査では、理解できる例は実際には見つかりませんでした。たとえば、コマンドがbin / lsの場合、execvはホームディレクトリからすべてのファイル/フォルダを表示することをどのようにして知るのでしょうか。ディレクトリを変更したことをシステムに伝えるにはどうすればよいですか?
私はこのサイトをたくさん使ってきました。http://linuxgazette.net/111/ramankutty.htmlですが、やはり困惑しています。
ご協力いただきありがとうございます。既存のコードの一部を投稿する必要があるかどうかを教えてください。ただし、それが必要かどうかはわかりません。
c - C シェルでハングする execv() コマンド
私は C シェルで作業しており、実行/bin/ls
すると正しく表示されますが、後でハングします。私が持っている関連するコードは以下のとおりです。親の場合に wait() ステートメントがないことに関係しているように感じますか?
c - fork と execve のトラブル
クラスの割り当てのために、独自の基本的なシェルを作成しています。他の関数の中でも特に、絶対パスを処理し、fork() と execv を使用して外部アプリケーションを実行できる必要があります。
アイデアは、プログラムが子プロセスをフォークし、その子プロセスを置き換える execv を呼び出し、外部実行が完了すると終了するというものです。
残念ながら、私はこれに関するクラスに参加できませんでした。オンラインで見つけたいくつかの例を試しましたが、どれも機能しませんでした。問題は、親プロセスが execv コマンドを複製し、それ自体を終了させることです。現在、「/bin/ls」を実行してシェルのメインループに戻ろうとしています。
これが問題のコードです。シンプルなものが欠けていると思います。はい、これは教授にとって良い質問ですが、彼は金曜日のオフィスアワーを守っていないので、メールの返信を何時間も何日も待ちたくありません。:P 同様に、より良いエラーチェックを実装する必要があることもわかっています。今は基本的な機能に取り組んでいます。あとで機能を追加します。
以下のすべての変数が適切な値を持っていることを確認しました。問題は、execv の後にのみ子プロセスを閉じ、親が同じことをしないようにするにはどうすればよいかということです。
TLDR: fork/execv の使い方を独学で学んでいて、自分がまったく無知であることがわかりました。
c - lsのexecvをファイルにリダイレクトしてからパイプにリダイレクトしたいのですが、なぜ機能しないのですか?
まず、ファイル内のls(exec)の出力をリダイレクトしてから、ファイルからパイプにリダイレクトしたいのですが、なぜ機能しないのですか?ファイルをリダイレクトしても問題ありませんが、それだけです。
の出力の長さを見つけるにはどうすればよいls
ですか?(それが私がファイルへのリダイレクトを行った理由です)。
c++ - execvを実行できません
私は次のようにexevpを使用してコマンドを実行しようとしています:
これは機能します。ただし、最初のパラメーター「/ usr / sbin / program」をパラメーターとして使用する場合は、次のようにします。
これは失敗し、-1を返します。どうしてなのかわからない。
みんなありがとう
c - パイプを介した execv() されたプログラムとの通信が機能しない
プログラムをロードしてソケットioをこれらにリダイレクトするソケットを作成しようとしています。inetd のように聞こえますが、私が知る限り、inetd はポートが要求されたときにプログラムをロードします。永久にロードしたい。
ここまでは順調ですね。ソケットサーバーを書くのはそれほど難しいことではありませんが、残りはうまくいきませんでした。私は基本的にパイプ()、dup2()を開き、それをstdinとstdout、およびexecv()プログラムに開きたいと思っています。
問題は、呼び出されたプログラムが入力を取得しないことです。テスト プログラムで表示してみます。誰か教えてください、何が悪いのですか?
c - fork() kill() および execv()
ここで小さな単体テストを試みています。しかし、プログラムは期待どおりに動作しません。
さて、私はプログラムが次のように実行されることを期待しています: 4.子プロセスはexecvの実行を終了し、「IVE BEEN KILLED」を出力します。これは起こりません。
私の目的は、execv が実行を継続した直後にいくつかのフラグを立てて、execv が実行したプログラムが終了したことを知ることです (printf が強制終了された場所)。数千行のコードがあり、必要でない限り他の方法を使用したくありません。
ありがとう
c++ - execvによって実行されたプロセスの出力をリダイレクトします
重複の可能性:
出力をCのファイルにリダイレクトする
私は次のようにプロセスを実行しています:
問題は、出力をにリダイレクトさせる方法です。
args配列に追加しようとしましたが、プログラムへの引数として送信されました...
誰かアイデアはありますか?
ありがとう
c++ - プログラムで 2 つ以上の shellexecute 関数を呼び出す方法
私は Windows プラットフォームでの winapi c++ の初心者です。1 つのプログラムで 3 つの exe ファイル、つまりインストール プログラムを実行する必要があります。shellexecute、exec v、システムコールを使用しましたが、最初のプログラムのインストール後にすべてがプログラムを終了しています。これを解決するのを手伝ってください...
私が使用したコードの一部
よろしくお願いします :)
c - パイプを使用したフォークプロセスでのプログラムのクラッシュ
与えられたパスのリストからコマンドを見つけてコマンドを実行する、コースの宿題用の基本的なシェルを書いています。また、パイプを処理するためのものです。ただし、子プロセスをforkすると、gdbに「書き込みエラー:パイプが壊れています」というメッセージが表示され、プログラムが突然終了します。
正しいパイプの開閉に注意を払っていたので、なぜこれが起こっているのか理解できないようです。プロセスのフォークは希望どおりに機能しているようです。CおよびUNIXプログラミングの経験が豊富な人が問題の診断を手伝ってくれませんか?私のフォークの実装/パイプの実装に論理的に間違っているものはありますか?