我正在寻找一种方法来读取由内核创建的处于不断变化状态的文件。在 beaglebone 上,获取模拟输入的值是从文件中读取的问题,我们称之为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 %s\n", 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 %s\n", BUFFER);
}
line[strlen(line) - 1] = '\0';
fclose(fp);
return(atoi(line));
}
附带说明的是,当使用该printf("\n"); // Temporary fix until we know how to sync file reads.
行时,我可以获得准确的文件读取,但是如果我删除该行,我会得到错误的值。