其他分享
首页 > 其他分享> > execve-没有这样的文件或目录?

execve-没有这样的文件或目录?

作者:互联网

我在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