0

カーネルによって作成され、常に変化しているファイルを読み取る方法を探しています。ビーグルボーンでは、たとえばアナログ入力の値を取得することは、ファイルからの読み取りの問題であり、それを と呼びましょうain_value。この値を取得する推奨される方法は、catコマンドを使用することです。ただし、C を使用してファイルから読み取ることができるようにしたいと考えています。これを処理する現在の方法には、いくつかの欠陥があるようです。1 秒未満のループでファイルを読み取ろうとすると、同期の問題が発生します。`watch --interval=0.5 'cat ain_value' を使用すると、一貫した値を取得できます。次のコードを使用すると、ファイルを開くことができません。OS と同期して、次のコードをより信頼できるものにする方法はありますか?

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.行を使用すると正確なファイル読み取りを取得できますが、この行を削除すると間違った値が取得されます。

4

1 に答える 1