execv()关于论点的怪癖

时间:2011-04-16 16:34:15

标签: 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);
}

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

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

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

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

1 个答案:

答案 0 :(得分:10)

使用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);
}

以上代码段经过测试并正常运作。