ndk开发 popen函数替代

发布于 2022-09-03 09:07:54 字数 850 浏览 23 评论 0

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

  1. popen

  2. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

近箐 2022-09-10 09:07:54

无论是popen还是system,都可以是forkexec....

第七度阳光i 2022-09-10 09:07:54

我觉得应该不是因为使用了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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文