Android上的C ++代码 - execl()函数调用失败

时间:2016-01-14 19:19:47

标签: android c++ linux shell

故事 - 我在一个有根据的Android Wear设备上获得了一个脚本文件,我想用我的c ++代码运行它。

首先我尝试了这个int ret = system(/system/bin/sh /full/path/a.sh),结果发现每次system()返回代码127时 - 命令不存在错误。

我在这里找到了这个解决方法:system is returning error 127 when called from c++ in linux我和@Nikhilendra说:

int ret = execl("/system/bin/sh","/system/bin/sh","/full/path/a.sh",(char*)NULL)

现在我的c ++代码每次都在此行崩溃,即使没有返回值,所以我无法获得任何错误代码。

非常感谢任何帮助。

EDIT1 : 脚本a.sh本身运行正确。

EDIT2 : 我的问题可以理解为system is returning error 127 when called from c++ in linux

的后续行动

1 个答案:

答案 0 :(得分:0)

如果你想使用其中一个exec函数来模仿system调用,你必须首先分叉一个新的子进程,因为当前进程(图像)被替换为exec来电。也就是说,exec只会在失败的情况下返回。

我不能说,如果fork系统调用适用于Android。但是,您可以使用这个小例子查看exec来电。我实际上是在Linux机器上测试过的。 编辑:您可能需要将sh的路径更改为/system/bin/sh

a.sh的内容:

#!/bin/sh
echo "Hello World."

C ++测试程序的内容(称为exec_test)。

extern "C" {
    #include <unistd.h>
    #include <errno.h>
}
#include <iostream>

int main()
{
  execl("/bin/sh","sh","./a.sh",NULL);
  // execl only returns if it failed
  std::cout << "errno: " << errno << std::endl;
  return 0;
}

输出:

$ ./exec_test
Hello World.