C gpio端口的文件描述器I/O中存在奇怪的事情
我在Linux中编写代码来控制主板上的gpio端口,使用以下代码。但是,read()的结果始终是0x10,这是LF换行的十六进制。 电压是一个枚举变量,int值为0,1表示低和高。fd是gpio端口的文件描述符。0x30是字符“0”的十六进制代码。write()中没有错误C gpio端口的文件描述器I/O中存在奇怪的事情,c,file-io,embedded-linux,file-descriptor,C,File Io,Embedded Linux,File Descriptor,我在Linux中编写代码来控制主板上的gpio端口,使用以下代码。但是,read()的结果始终是0x10,这是LF换行的十六进制。 电压是一个枚举变量,int值为0,1表示低和高。fd是gpio端口的文件描述符。0x30是字符“0”的十六进制代码。write()中没有错误 为了与shell实用程序兼容,GPIO端口的内容通常是一个字符,后跟换行符——例如: % xxd /sys/class/gpio/gpio89/value 0000000: 310a
为了与shell实用程序兼容,GPIO端口的内容通常是一个字符,后跟换行符——例如:
% xxd /sys/class/gpio/gpio89/value
0000000: 310a 1.
向GPIO设备写入一个字符会使文件指针前进到第二个字符,这始终是您看到的换行符
在执行读/写操作之前,需要将文件指针重置为开头:
lseek(fd, 0, SEEK_SET);
打开fd的文件是什么?@duskwuf如果fd打开到路径为:/sys/calss/gpio/gpio102/value.Ya的gpio端口。它工作得非常好。然而,我不认为在进一步写入之前需要lseek,不管偏移量在哪里。根据我的新代码,读过一次后,写的内容会立即生效。是否因为文件限制为一个字节,因此新的写入将替换旧的内容?或者是因为写入将从文件的开头开始?顺便说一句,在输出的末尾,在长换行之前,“1”是什么?我的猜测与您的猜测相同:在
write()
上忽略指向这些文件的文件指针,因为只有一个合理的写入位置。就1.
而言,这是数据的文本表示。(将显示一个
,而不是换行。)
lseek(fd, 0, SEEK_SET);