execv()关于论点的怪癖

las*_*ase 2 c c++

我正在尝试为作业输出"ps"的结果,但我遇到了一些我想弄明白的怪癖.

这可以正常工作,并在shell中显示ps的输出:

//Create "ps -u laser"
int pid_ps = fork();
char *argv[1] = {"-u laser"};
if (pid_ps == 0) {
   execv("/bin/ps", argv);
}
Run Code Online (Sandbox Code Playgroud)

现在,这是我的幻灯片中给出的格式,但只是给出了"用法:"和"格式是一个或多个:"ps运行时的通知:

//Create "ps -u laser"
int pid_ps = fork();
char *argv[2] = {"-u", "laser"};
if (pid_ps == 0) {
   execv("/bin/ps", argv);
}
Run Code Online (Sandbox Code Playgroud)

我也尝试在数组的末尾放置0和NULL,这是在其他答案中提出的,但没有运气.

我可能忽略了一些小事,但我对c不太熟悉.任何见解都表示赞赏.

Eri*_*rik 11

使用char *argv[] = {"/bin/ps", "-u", "laser", 0};- 第一个参数是可执行文件名.

编辑:样本.

int pid_ps = fork();
if (pid_ps == 0) {
  char *argv[] = {"/bin/ps", "-u", "laser", 0};
  execv("/bin/ps", argv);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码片段经过测试并正常运行.