c - 从 execv 启动终端 (sh) 返回错误 :/bin/sh:/bin/sh: cannot execute binary file

标签 c linux bash operating-system embedded-linux

我正在尝试从 c 程序执行在 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: 无法执行二进制文件

最佳答案

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;
}

关于c - 从 execv 启动终端 (sh) 返回错误 :/bin/sh:/bin/sh: cannot execute binary file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49475237/

相关文章:

c - 如何链接包含在 C 中的库?

android - GIGABYTE 的 USB 供应商 ID

c++ - 试图用 mmap 引起段错误

linux - 循环 Bash Shell 脚本

c++ - 如何使用 memcpy 返回从函数修改的两个数组?

c - cc中如何使用EOF作为prime read

linux - 从 Eclipse Luna 访问远程 Glassfish4 服务器

linux - 如何删除位置参数的扩展名?

python - coursera-dl osx 不是从命令行运行的

c - Learn C The Hard Way 练习 14 Error (warning : array subscript has type ? char? [-Wchar-subscripts]