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

C++ code on Android - execl() function call failure

本文关键字:函数调用 失败 execl Android 代码 C++      更新时间:2023-10-16

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

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

我在这里找到了这个解决方法:在 Linux 中从 c++ 调用时,系统返回错误 127,我按照@Nikhilendra所说的那样做:

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

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

任何帮助都非常感谢。

编辑1:脚本 a.sh 本身运行正确。

编辑2:我的问题可以理解为系统的后续操作是在 linux 中从 c++ 调用时返回错误 127

如果要使用其中一个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.