c++ - ndk开发 popen函数替代

浏览:32日期:2023-04-24

问题描述

ndk开发中需要用到 命令获取一些参数信息,目前知道的是有两种方法

popen

system

popen发现在小米商店上不了架,但是system在Android下无法写入文件。比如’ps > /sdcard/.log’ 运行后可以发现’.log’文件已经创建 但是文件内并没有任务信息。

具体代码:

FILE *fp; char cmd[MAX]; char dir_path[MAX]; sprintf(dir_path, '/sdcard/.log'); sprintf(cmd, 'ps > %s', dir_path); int status; sighandler_t old_handler; old_handler = signal(SIGCHLD, SIG_DFL); status = system(cmd); signal(SIGCHLD, old_handler); if(status < 0){DEBUG_PRINT('cmd: %st error: %s', cmd, strerror(errno)); } fp = fopen(dir_path, 'r'); if (fp) {while (fgets(line, MAX, fp)) { process_count ++; DEBUG_PRINT('msg:%s, len:%d', line, strlen(line));} } fclose(fp);

问题解答

回答1:

无论是popen还是system,都可以是fork和exec....

回答2:

我觉得应该不是因为使用了popen这个<stdio.h>里的函数而上不了架.KSWeb这种集成了Nginx/PHP/MySQL的Android应用不一样能上Google商店.Java的Runtime.getRuntime().exec()本质上是fork进程,Android的root用户运行的受精卵进程zygote本质也是fork,难道因为fork了进程就上不了架,我觉得不可能.小米商店应用下架难道都没有反馈说明么?

GNU libc里popen底层是Unix Standard Header(unistd.h)里的execve.

相关文章: