execvp() 不会加载文件:"No such file or directory"

execvp() wont load file: "No such file or directory"

我写了2个程序。 第一个通过argv得到2个字符串,打印程序进程id和最小的字符串(按字典顺序)。

int main(int argc,char **argv) {
    int cmp;
    if (argc != 3){
        perror("Wrong arguments");
        exit(EXIT_FAILURE);

    }
    printf("my ID: %d\n",getpid());
    cmp = strcmp(argv[1],argv[2]);
    if (cmp < 0)
        puts(argv[1]);

    else if (cmp > 0)
        puts(argv[2]);

    else puts(argv[1]);

    exit(EXIT_SUCCESS);
}

我已经通过终端编译了代码:

gcc -Wall my_cmp.c -o my_cmp

第二个程序创建一个子进程并执行 execvp()my_cmp 发送“abc”“de”。

void do_sun(char **argv);

int main() {
    pid_t status;
    char *args[] = { "my_cmp", "abc","de", NULL };

    status = fork();

    if (status < 0){
        perror("Cannot fork");
        exit(EXIT_FAILURE);
    }
    if (status == 0){
        char *args[] = { "my_cmp", "abc","de", NULL };
        do_sun(args);
        exit(EXIT_SUCCESS);
    }

    if (status > 0){
        wait(&status);
        if (execvp(args[0],args) != 0 )
            perror("error");
        exit(EXIT_SUCCESS);
    }
    exit(EXIT_SUCCESS);
}

void do_sun(char **args){
    if (execvp(args[0],args) == -1 )
                perror("error");
    exit(EXIT_SUCCESS);
}

当我 运行 程序时,我收到此消息:

error: No such file or directory
error: No such file or directory

我尝试将目录切换到 my_cmp 文件,但没有成功。

在某些系统上,默认情况下它不会在工作目录中搜索可执行二进制文件。

您应该使用 ./my_cmp 而不是 my_cmp 才能在此类系统上运行。

如果您使用 execv<b>p</b>,您是说可执行文件将在“路径中”找到;也就是说,在 $PATH 中列出的目录之一中。此路径上的目录很少,虽然可以将 . 添加到 $PATH,但通常认为这是安全漏洞。

如果您想指定可执行文件的路径(在这种情况下您可以将其放在您想要的任何目录中),请使用非路径 execv.