我在execve上遇到了一些问题.我正在尝试制作一个可以像bash shell一样运行的shell,但是派生的孩子执行命令时遇到了问题.这是我给孩子的东西. cmd是带有用户键入命令的char *.但是,当我运行此程序时,我从perror收到此错误:
execve error: No such file or directory.
我用一个简单的ls尝试了该程序,它应该制作path =“ / bin / ls”并执行它(我已经确认这是我的ls命令所在的位置),但是它仍然会抱怨.我究竟做错了什么?谢谢!
码:
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;
}
解决方法:
我要做的第一件事是插入:
printf ("[%s]\n", path);
在调用execve之前.那应该确认可执行文件就是您认为的样子.
只要您输入的代码正确且可执行文件实际可用,您的代码就可以了.例如,以下完整程序可以在我的Debian机器上正常运行:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main (int argc, char *argv[]) {
if (argc > 1) {
char * word = strtok (argv[1], " ");
char path[128] = "/bin/";
strcat (path, word);
char * newenvp[] = { NULL };
char * newargv[] = { path, NULL };
printf ("[%s]\n", path);
int ret = execve (path, newargv, newenvp);
if (ret == -1) {
perror("execve error");
}
}
return 0;
}
当我运行./testprog ls时,输出如下内容:
[/bin/ls]
kidsshares.ods paxwords birthdays homeloantracking.gnumeric
shares2011.ods backup0.sh development lexar
accounts.ods backup1.sh photos testprog.c
testprog
标签:c-3,execve,linux 来源: https://codeday.me/bug/20191009/1877623.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。