execvp(argv[1], &argv[1])
execvp() の 2 番目の引数で正確に何が行われますか?
2 番目の引数は、呼び出されたプロセスの にNULL
なる文字列の配列へのポインターである必要があります。argv
この配列の最初の要素はargv[0]
、呼び出し先の になります。これは、パスと必ずしも同じではありません。たとえば、フル パスでプロセスを呼び出すことができますが、そのベース名を として渡しますargv[0]
。また、一部のプログラムは、argv[0]
. argv[0]
有名な例は、Unix シェルがで始まると「ログイン シェル」として動作する-
ため、基本的なlogin
プログラムで実行できることです。
char *argv[2] = {"-sh", NULL};
execvp("/bin/sh", argv);
argv
ベクトルとして呼び出されたプログラムに渡されます。ドキュメントを引用します:
execv()、execvp()、および execvpe() 関数は、新しいプログラムで使用可能な引数リストを表すヌル終了ストリングへのポインターの配列を提供します。最初の引数は、慣例により、実行中のファイルに関連付けられたファイル名を指す必要があります。