C语言 读取内核在不断变化状态下创建的文件的最佳方法



我正在寻找一种方法来读取内核创建的处于不断变化状态的文件。在小猎犬骨上,获取模拟输入的值是从文件中读取的问题,我们称之为ain_value。获取此值的建议方法是使用 cat 命令。但是,我希望能够使用 C 从文件中读取。我目前的处理方式似乎有一些缺陷。如果我尝试在不到一秒的循环中读取文件,则会出现一些同步问题。使用"watch --interval=0.5 'cat ain_value"我可以得到一致的值,当使用以下代码时,我得到文件无法打开。有没有办法与操作系统同步并使以下代码更可靠?

int AIN_value(char AIN) {
    char line[10] = {0};
    char BUFFER[35];
    snprintf(BUFFER, sizeof(BUFFER), "%s%c", AIN_FILE, AIN);
    FILE *fp;
    fp  = fopen(BUFFER, "r");
        if(fp == NULL) {
                printf("ERROR: could not open %sn", BUFFER);
        }
    printf("n"); // Temporary fix until we know how to sync file reads.
    if (fgets(line, sizeof(line), fp) == NULL) {
        printf("ERORR: could not read from %sn", BUFFER);
    }
    line[strlen(line) - 1] = '';
    fclose(fp);
    return(atoi(line));
}

附带说明是,当使用printf("n"); // Temporary fix until we know how to sync file reads.行时,我可以获得准确的文件读取,但是如果我删除此行,我会得到错误的值。

如果读取/sys/devices/ocp.2/helper.14/AIN伪文件产生错误的数据,则生成该数据的内核代码有问题。除了更正此代码之外,您还可以查看是否有更好的API来读取模拟输入等。

最新更新