次のパラメーターを入力する必要があります。
int execve(const char *filename, char *const argv[], char *const envp[]);
このプログラムを実行すると:
#include <unistd.h>
int main() {
char *args[2];
args[0] = "/bin/sh";
args[1] = NULL;
execve(args[0], args, NULL);
}
シェルは期待どおりに正しく生成されます。
私の問題は、次のように NULL を 2 番目のパラメーターとして渡すと、シェルが正しく生成されることです。
#include <unistd.h>
int main() {
char *args[2];
args[0] = "/bin/sh";
args[1] = NULL;
execve(args[0], NULL, NULL);
}
では、NULL の代わりに args ベクトル ("/bin/sh" + NULL) を 2 番目のパラメーターとして使用する目的は何ですか?