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' また読める!