iOS使用posix_spawn执行dpkg安装deb命令不成功问题
各位好,在看了飘大的书以后,了解到可以使用 posix_spawn执行系统命令;
于是,我想到了自动下载deb,并自动安装的的思路;在app里面下载deb包,然后发消息给守护进程,执行dpkg命令安装。
首先在ssh连接到手机上以后,dpkg -i xxx.deb 可以安装正常,正常没有问题;
问题就出在用 posi_spawn下发执行安装时不成功,大家有什么想法,是posix_spawn执行时的权限问题吗;
#include <spawn.h>
static int spawn(const char* executable, ...) {
int ret;
pid_t pid;
va_list args;
va_start(args, executable);
setuid(0);
ret = posix_spawn(&pid, executable, NULL, NULL, (char* const *)args, NULL);
if (ret == 0) waitpid(pid, NULL, 0);
return ret;
}调用:
spawn("/usr/bin/dpkg", "/usr/bin/dpkg", "-i", "xxx.deb", NULL);
执行错误:
dpkg: error: PATH is not set
最后一个参数别忽略啊~~
#include <spawn.h>
static int spawn(const char* executable, ...) {
int ret;
pid_t pid;
va_list args;
va_start(args, executable);
setuid(0);
const char *path[] = {"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", NULL};
ret = posix_spawn(&pid, executable, NULL, NULL, (char**)args, (char**)path);
if (ret == 0) waitpid(pid, NULL, 0);
return ret;
}
int main(int argc, char const *argv[])
{
spawn("/usr/bin/dpkg", "/usr/bin/dpkg", "-i", "chinapyg.deb", NULL);
return 0;
}
飘云 发表于 2020-12-30 12:28
最后一个参数别忽略啊~~
#include
非常感谢飘哥,完美解决问题!{:loveliness:}
页:
[1]