I2C文件描述符上的I2C总线可写/可读标志

时间:2018-10-11 16:43:33

标签: c++ linux select file-descriptor i2c

我想使用带有事件循环(包含pselect()的C ++应用程序)通过Raspbian上的I2C总线将多个温度计连接到Raspberry板上。从应用程序中打开默认的i2c-0文件描述符(并使用linux/i2c-dev.h界面),我将文件描述符添加到pselect()的{​​{1}}和{{1} }。我想知道这个文件描述符是否会变成fd_set *readfdsfd_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设备是否已缓冲?我可以依靠这种机制吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

所以这是

  

pselect()和select()函数应支持常规文件,终端和伪终端设备,基于STREAMS的文件,FIFO,管道和套接字。未指定pselect()和select()在引用其他文件类型的文件描述符上的行为。

i2c-0是字符设备文件类型:https://www.kernel.org/doc/Documentation/i2c/dev-interface

pselect()确实不能保证该文件的任何内容。因此,不,您不能依赖它。