ndk开发 popen函数替代
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: %s\t 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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
无论是
popen
还是system
,都可以是fork
和exec
....我觉得应该不是因为使用了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.