搜尋

首頁  >  問答  >  主體

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

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);
ringa_leeringa_lee2773 天前414

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:21:12

    無論是popen還是system,都可以是forkexec....

    回覆
    0
  • 黄舟

    黄舟2017-04-17 14:21:12

    我覺得應該不是因為使用了popen這個裡的函數而上不了架.
    KSWeb這種集成了Nginx/PHP/MySQL的Android應用不一樣能上谷歌商店.
    Java的Runtime.getRuntime().exec()本質上是fork進程,
    Android的root用戶運行的受精卵進程zygote本質也是fork,
    難道因為fork了進程就上不了架,我覺得不可能.
    小米商店應用下架都沒有回饋說明麼?

    GNU libc裡popen底層是Unix Standard Header(unistd.h)裡的execve.

    回覆
    0
  • 取消回覆