C++ execv()关于参数的怪癖
我试图为一项作业输出“ps”的结果,但我遇到了一些我想弄清楚的小怪癖 这将正常工作,并在shell中显示ps的输出: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
//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争论。就像你说的,比我原来的方法更干净。谢谢你,埃里克。