【发布时间】:2015-06-23 12:13:25
【问题描述】:
我正在尝试使用 C 作为作业创建一个 shell,但我的 execvp() 不起作用。它不执行 ls。我在虚拟机 lubuntu 32 工作 这是我的输出任何我的错误信息!
if(pid==0){
printf("child");
char **tokens=tokenizer(hey)//hey is from fgets. tokenizer is fine
printer(tokens);
//execute ls
execvp( ls_args[0], ls_args);
//only get here if exec failed
perror("execv failed");
return 2; //return error status }
【问题讨论】:
-
您为什么要向我们隐藏错误消息?这是某种诡计还是恶作剧?很明显是你拥有的信息,那么这部分信息可能有什么好处呢?
-
它没有显示任何错误消息,它只是打印“子”,我的程序继续工作,直到父进程结束。如果我执行 execlp("ls","ls","-l",NULL);它的工作!
-
是
ls在您使用的任何shell 的路径中吗?也许应该改成/bin/ls。 -
@user3135218:在这种情况下, execvp 没有失败,因为它永远不会返回。这是
ls的问题。工作目录是空的吗? -
@kevin 我的源文件在工作目录它不是空的:(