Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ execv()关于参数的怪癖_C++_C - Fatal编程技术网

C++ execv()关于参数的怪癖

C++ execv()关于参数的怪癖,c++,c,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

我试图为一项作业输出“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不太熟悉。任何洞察都将不胜感激。

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

上面的代码片段已经过测试并正常工作。

我不确定这两个代码是否正确。你确定
char*argv[]={“-u”,“laser”,NULL}不起作用?只需加倍检查,仍然会给出“格式”和“用法”消息。或者您可以将
“ps”
作为
argv[0]
传递;那里真的不需要完整的路径名。由于某种原因,我在没有完整路径名的情况下遇到了错误。此外,当将程序名和参数放在同一个数组中时,execv也会失败。Hmm。。有趣。从来没有想过会有两次ps争论。就像你说的,比我原来的方法更干净。谢谢你,埃里克。