1
static void setIntField(JNIEnv* env, jobject obj, const char* path,
                        jfieldID fieldID) {
    const int SIZE = 128;
    char buf[SIZE] = "\0";
    jint value = 0;
    if (readFromFile(path, buf, SIZE) > 0) {
        value = atoi(buf);
    }
    env->SetIntField(obj, fieldID, value);
}

static int readFromFile(const char* path, char* buf, size_t size) {
    if (!path)
        return -1;
    int fd = open(path, O_RDONLY, 0);
    if (fd == -1) {
        LOGE("Could not open '%s'", path);
        return -1;
    }

    size_t count = read(fd, buf, size);
    if (count > 0) {
        count = (count < size) ? count : size - 1;
        while (count > 0 && buf[count - 1] == '\n')
            count--;
        buf[count] = '\0';
    } else {
        buf[0] = '\0';
    }

    close(fd);
    return count;
}

これは私のAndroidJNIコードです。同じパスを読み取るのに、値が2回同じではないのはなぜですか。私はこの道を読んでいます/sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq

それを修正する方法は?

scaling_min_freq値は51000です。最初に51000を取得します。2回目に150000を取得します。

4

0 に答える 0