我在execve遇到了一些问题 . 我正在尝试创建一个可以像bash shell一样运行的shell,但是我遇到了forked子执行命令的问题 . 这就是我对孩子的看法 . cmd是一个char *,其中包含用户输入的命令 . 但是,当我运行此程序时,我从perror中收到此错误:
execve error: No such file or directory.
我用一个简单的ls尝试了程序,它应该使path =“/ bin / ls”并执行它(我已经确认这是我的ls命令所在的位置)但它仍然抱怨 . 我究竟做错了什么?谢谢!
CODE:
if(pid == 0){
// Parse the command
char * word = strtok(cmd, " ");
char path[128] = "/bin/";
strcat(path, word);
// Execute the process
char * newenvp[] = { NULL };
char * newargv[] = { path, NULL };
ret = execve(path, newargv, newenvp);
if(ret == -1){
perror("execve error");
}
return EXIT_SUCCESS;
}
2 回答
我要做的第一件事就是插入:
在调用
execve
之前 . 这应该确认可执行文件是你认为的 .只要您输入的输入正确且可执行文件实际可用,您的代码看起来就可以了 . 例如,以下完整程序在我的Debian框中正常工作:
输出,当我运行
./testprog ls
时,有以下几点:如果您不想手动浏览文件系统以找到正确的二进制文件,则会有
execlp
(附加p) . 从联机帮助页: