Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C gpio端口的文件描述器I/O中存在奇怪的事情_C_File Io_Embedded Linux_File Descriptor - Fatal编程技术网

C gpio端口的文件描述器I/O中存在奇怪的事情

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

我在Linux中编写代码来控制主板上的gpio端口,使用以下代码。但是,read()的结果始终是0x10,这是LF换行的十六进制。 电压是一个枚举变量,int值为0,1表示低和高。fd是gpio端口的文件描述符。0x30是字符“0”的十六进制代码。write()中没有错误


为了与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);