故事 - 我在一个有根据的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
的后续行动答案 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.