【发布时间】:2018-09-03 15:21:57
【问题描述】:
我正在尝试从 ac 程序执行在 Linux 中启动新终端的命令 sh,但我收到此错误 /bin/sh: /bin/sh: cannot execute binary file when I am using 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: 无法执行二进制文件
【问题讨论】:
-
试试:
"/bin/bash","-c","/bin/sh" -
当我尝试这个时同样的错误:` int main (){ int ret=0; char *argv[] = {"/bin/bash", "/bin/bash","-c","/bin/sh",NULL}; ret=execv(argv[0], argv);返回0; } `
-
你加倍了
/bin/bash -
原来失败的原因是因为它相当于运行命令
/bin/bash /bin/sh,如果你在命令行运行它,你会得到完全相同的错误。原因是默认情况下,/bin/bash 将其第一个参数解释为要执行的 shell 脚本文件,而 /bin/sh 不是 shell 脚本,它是二进制文件。
标签: c linux bash operating-system embedded-linux