C++ Android 上的代码 - execl() 函数调用失败
C++ code on Android - execl() function call failure
故事 - 我在有根的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.
相关文章:
- 函数调用中参数的顺序重要吗
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 从 C#-DLL 调用函数的 C++ 失败
- std::tie 在从函数调用传递值时失败,并显示"无法绑定非常量左值引用"
- asio::thread_pool 在调用构造函数之前失败
- 为什么它是一个使用GCC的令人震惊的函数调用?模板扣减失败
- 超能力 NDK 安卓:返回 int 在"extern"块中成功,在调用函数中失败
- C++:转发模板成员函数调用失败
- 文件系统::p ath 构造函数调用失败
- 为什么这个C++成员函数调用会失败并出现分段错误
- CUDA 调用在析构函数中失败
- set_new_handler (std::new_handler func) 失败后的构造函数调用,用于内存分配失败
- 运行时检查失败 #0 - ESP 的值未在函数调用中正确保存
- C++ Android 上的代码 - execl() 函数调用失败
- 运算符new失败时的构造函数调用
- 重载的*运算符在多个*操作后调用析构函数时失败
- 为什么非虚拟函数调用即使在dynamic_cast失败后仍然成功
- 错误:没有匹配的函数调用[…]注意:模板参数演绎/替换失败
- C++复制初始化+隐式构造函数调用=失败