c/c++ 调用系统命令

jni接口

  • sscanf()
  • popen()
  • fgets()
        FILE *file = NULL;
        int offset = 0;
        char line[MAX_SIZE];
        char buffer[MAX_SIZE];
        char result[MAX_SIZE * 2];
        char size_m[MIN_SIZE];
        char used[MIN_SIZE];
        char avail[MIN_SIZE];
        char usage[MIN_SIZE];
        char mount[MIN_SIZE];
        char fileSystem[MIN_SIZE];

        if (NULL == (file = popen("df -h |tail -n +2", "r")))
        {
            LOGE("%s->%d| error %d, %s",__func__,__LINE__,errno, strerror(errno));
            return env->NewStringUTF(constErrOpen);
        }

        memset(result, 0, sizeof(result));
        result[0] = '{';
        offset = 1;
        for (size_t i = 0;!feof(file);i++)
        {
            fgets(line, MAX_SIZE, file);
            sscanf(line, "%[^ ]",fileSystem);
            sscanf(line, "%*[^ ]%*[ ]%[^ ]%*[ ]%[^ ]%*[ ]%[^ ]%*[ ]%[^ ]%*[ ]%[^\n]", size_m, used, avail, usage, mount);

            LOGI("GetDiskInfo:: line %s", line);
            if(0 == strlen(line))
            {
                continue;
            }

            memset(buffer, 0, sizeof(buffer));
            sprintf(buffer, "\"%s size\":\"%s\",\"%s used\":\"%s\",\"%s avail\":\"%s\",\"%s usage\":\"%s\",\"%s mount\":\"%s\",", fileSystem, size_m, fileSystem, used, fileSystem, avail, fileSystem, usage, fileSystem, mount);
            LOGI("GetDiskInfo::buffer %s", buffer);

            int bufferlen = strlen(buffer);
            memcpy(result+offset, buffer, bufferlen);
            offset += bufferlen;
        }
        result[offset -1] = '}';
        result[offset] = '\0';

        LOGI("GetDiskInfo:: return %s", result);
        pclose(file);
        return  env->NewStringUTF(result);