从execv返回错误启动终端(sh):/ bin / sh:/ bin / sh:无法执行二进制文件

时间:2018-03-25 11:21:38

标签: c linux bash operating-system embedded-linux

我正在尝试执行从ac程序在Linux中启动新终端的命令sh,但我得到此错误/ bin / sh:/ bin / sh:当我使用execv()时,无法执行二进制文件结果用fork然后execv。  但当我尝试系统命令成功时,我怎么能用execv做这个命令?

工作:

int main (){
        system("sh");
        return 0;
}

不起作用:

int main (){

        int ret=0;
        char *argv[] = {"/bin/bash", "/bin/sh",NULL};
        ret=execv(argv[0], argv);

        printf("ret: %d \n",ret);
        return 0;
}

此代码返回此错误: / bin / sh:/ bin / sh:无法执行二进制文件

1 个答案:

答案 0 :(得分:2)

cat aa.c

#include<stdio.h>
#include<unistd.h>
int main (){

        int ret=0;
        char *argv[] = {"/bin/bash", "-c","/bin/sh",'\0'};
        ret=execv(argv[0], argv);

        printf("ret: %d \n",ret);
        return 0;
}

gcc aa.c -o aa

./aa 
sh-4.4$ 

和......仅仅是这样:

#include<stdio.h>
#include<unistd.h>
int main (){

    int ret=0;
    char *argv[] = {"/bin/sh",'\0'};
    ret=execv(argv[0], argv);

    printf("ret: %d \n",ret);
    return 0;
}