[解決済み] exec、execvp、execl、execvの違い?
質問
私はLinuxに新しいシェルを表現するコードを書いています。私がサポートしたいコマンドの1つは、プロセスを実行することです。 例えば、次のような行があるとします。
command [arguments]
それから、私は実行したい
command
をプロセスの実行が終了するまで、プロセスとして実行します。
そのためには、私が知っているのは
fork()
子プロセスを取得し、そのPIDを取得するために、私の問題は、私は.NET Frameworkの違いが何であるかを知らないことである。
exec
,
execvp
,
execl
,
execv
...そして、どれを使えばいいのか、なぜ使うのかがわからない。
私の現在のコード.
void External_Process(char *arguments[MAX_ARG], char* command)
{
int pID;
switch(pID = fork())
{
case -1:
perror("fork failed");
break;
case 0 :
setpgrp();
//execv(command, arguments);
//execvp(command, arguments);
//execl("/bin/bash", "/bin/bash","-c",command,NULL);
printf("smash error: > bad command %s\n" , command);
exit(-1) ;
break;
default:
return ;
}
}
ありがとうございました。
解決方法は?
概要
あなたの場合、私は以下のように使用することをお勧めします。
execvp
.
の違いを知るには、まず
exec*
関数は、ドキュメントを読む必要があります。
https://linux.die.net/man/3/exec
https://linux.die.net/man/2/execve
との違いは
execl*
と
execv*
は引数渡しです。
execl*
は引数のリストを要求するのに対し
execv*
は引数のベクトルを必要とします。
引数のリストは、コンパイル時にすべての引数を知っている場合に便利です。あなたの場合、引数はユーザが入力し、実行時に引数のベクトルを構築する必要があるので、いずれかの
execv*
関数を使用します。
というサフィックスを持つ関数は
p
を使用します。
PATH
環境変数でプログラムを探します(例
"ls"
を指定する必要があります (絶対パスかカレントディレクトリからの相対パス、たとえば
"/bin/ls"
). 使用方法
PATH
はシェルが通常行うことなので、これは正しい選択と思われます。
という接尾辞を持つ関数は
e
は、プロセスの環境を指定することができます。簡単のために、私はあなたのケースではこれを使用しません。
という結論に至ります。
execvp
もちろん
system
(代わりに
fork
/
exec*
/
wait*
) のように、基本的なシェルを実装するのではなく、単にコマンドを解釈するためにシェルを使用することになります。
関連
-
[解決済み】C 言語の添え字で配列の要素値を代入すると、配列でもポインタでもベクトルでもない値になる
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] eval、exec、compileの違いは何ですか?
-
[解決済み] Ruby、execとsystemと%x()またはBackticksの違いについて
-
[解決済み】定義と宣言の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み] strtokのセグメンテーションフォールト
-
[解決済み】警告:互換性のないポインタ型からの代入
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】GCC Cコードで静的宣言が非静的宣言に続くことを解決するには?
-
[解決済み】スレッド1:EXC_BAD_ACCESS(コード=1、アドレス=0x0)標準Cメモリ問題
-
[解決済み】警告:組み込み関数'printf'の非互換な暗黙の宣言(デフォルトで有効]
-
[解決済み] テスト
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み】.axfファイルとは何ですか?