我想通过Raspbian上的I2C总线将多个温度计连接到Raspberry板上,使用包含pselect()的事件循环的C++应用程序。打开应用程序中的默认i2c-0文件描述符(并使用linux/i2c-dev.h接口),我会将文件描述符添加到pselect()的fd_set *readfds和fd_set *writefds中。我想知道这个文件描述符是否会变成FD_WRITEABLE或FD_READABLE?既然I2C是主从设置,那么温度计就不可能启动通信,因为读写操作都是由用户应用程序发起的,所以我认为FD_READABLE应该是不可能的,对吗?
我还没有发现任何关于使用pselect的I2C,在套接字文件描述符中,可读/可写意味着什么?为什么普通的档案不麻烦呢?是我偶然发现的最接近的答案:“可读意味着套接字接收缓冲区中有数据或FIN。可写意味着套接字发送缓冲区中有可用的空间。”是否缓冲了I2C设备?我可以依靠这个机制吗?
非常感谢!
发布于 2018-10-11 17:18:01
所以有这样一个:
pselect()和select()函数应支持常规文件、终端和伪终端设备、基于流的文件、FIFO、管道和套接字。未指定引用其他类型文件的文件描述符的pselect()和select()的行为。
i2c-0是一个字符设备文件类型:https://www.kernel.org/doc/Documentation/i2c/dev-interface。
pselect()确实不能保证该文件的任何内容。所以,你不能依赖它。
https://stackoverflow.com/questions/52765133
复制相似问题