我想将多个温度计通过R2BUS总线上的i2C总线连接到树莓板上,使用C++应用程序,其中包含一个包含pselect()
的事件循环。打开应用程序中的默认文件描述符(并使用linux/i2c-dev.h接口),我将文件描述符添加到i2c-0
的pselect()
和fd_set *readfds
中。我想知道这个文件描述符是否会变成fd_set *writefds
或FD_WRITEABLE
?由于I2C是主/从设置,温度计应该不可能启动通信,因为读写操作都是由userland中的应用程序启动的,所以我认为FD_READABLE
应该是不可能的,对吗?
我还没有找到任何关于在pselect中使用I2C的信息,what does readable/writable mean in a socket file descriptor? And why regular files don't bother with that?是我偶然发现的最接近的答案:“可读意味着socket接收缓冲区中存在数据或FIN。
可写意味着套接字发送缓冲区中有可用空间。“I2C设备是否已缓冲?我能依靠这个机制吗?
谢谢!
最佳答案
所以这里有:
pselect()和select()函数应支持常规文件、终端和伪终端设备、基于流的文件、fifo、管道和套接字。未指定pselect()和select()在引用其他类型文件的文件描述符上的行为。
i2c-0是字符设备文件类型:https://www.kernel.org/doc/Documentation/i2c/dev-interfacepselect()
确实不能保证该文件的任何内容。所以,不,你不能依赖它。
关于c++ - I2C文件描述符上的I2C总线可写/可读标志,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52765133/