GPIOのデバイスファイルから、値を連続して読む - 揮発性のメモ2

揮発性のメモ2

知識をメモ書きしておく

GPIOのデバイスファイルから、値を連続して読む

GPIO sysfs で現在値を読むとき、普通はopenしてreadするとEOFに到達する
(なので、catコマンドで普通に読める)

$ cat /sys/class/gpio/gpio66/value
1


つまり、Cでopenしてreadするときは 2回読めない。
一般的には、lseekで先頭に戻してやる

    int buf[8];
    int fd = open("/sys/class/gpio/gpio66/value", O_RDWR | O_NOCTTY | O_NONBLOCK);

    // 1回目    
    result = read(fd, buf, sizeof(buf));
    // result=2, buf[0]='1', buf[1]='\n'
    
    // 2回目
    result = read(fd, buf, sizeof(buf));
    // result=0 (EOF)

    // 2回目やりなおし
    lseek(fd, 0, SEEK_SET); // 今度はシークして頭に戻す
    result = read(fd, buf, sizeof(buf));
    // result=2, buf[0]='1', buf[1]='\n' また読める!