我想使用带有事件循环(包含pselect()
的C ++应用程序)通过Raspbian上的I2C总线将多个温度计连接到Raspberry板上。从应用程序中打开默认的i2c-0
文件描述符(并使用linux/i2c-dev.h界面),我将文件描述符添加到pselect()
的{{1}}和{{1} }。我想知道这个文件描述符是否会变成fd_set *readfds
或fd_set *writefds
?由于I2C是主/从设置,因此温度计不可能启动通信,因为读写操作都是由用户区中的应用程序启动的,所以我认为FD_WRITEABLE
应该是不可能的,我说的对吗?
我没有发现将p2与I2C一起使用的任何信息,what does readable/writable mean in a socket file descriptor? And why regular files don't bother with that?是我偶然发现的最接近的答案:“可读表示套接字接收缓冲区中存在数据或FIN。 可写意味着套接字发送缓冲区中有可用空间。” I2C设备是否已缓冲?我可以依靠这种机制吗?
非常感谢!
答案 0 :(得分:1)
所以这是
pselect()和select()函数应支持常规文件,终端和伪终端设备,基于STREAMS的文件,FIFO,管道和套接字。未指定pselect()和select()在引用其他文件类型的文件描述符上的行为。
i2c-0是字符设备文件类型:https://www.kernel.org/doc/Documentation/i2c/dev-interface
pselect()
确实不能保证该文件的任何内容。因此,不,您不能依赖它。