事实证明这个open()和fopen()的误解源于Linux 2.6.14内核上一个ARM平台下有bug的I2C驱动程序。回退到一个有效的bit bashed驱动程序解决了我在此要处理的问题的根本原因。
我正在尝试解决Linux中(I2C)串行设备驱动程序的问题。似乎通过在写入和读取设备之间添加定时操作系统暂停(sleeps),事情会变得更好。(更好)。
另外:I2C的特性是主设备读取或写入的每个字节都由另一端的设备(从属设备)进行确认——暂停改善了事情,鼓励我认为驱动程序是异步工作的——这是我无法与总线如何工作相协调的地方。无论如何......
我想要刷新写入,以确保(而不是使用固定持续时间的暂停),或者以某种多线程友好的方式测试写入/读取事务是否已经完成。
使用fflush(fd);
的问题在于它需要“fd”是流指针(而不是文件描述符),即
FILE * fd = fopen("filename","r+");
... // do read and writes
fflush(fd);
我的问题是我需要使用ioctl()
,它不使用流指针。
int fd = open("filename",O_RDWR);
ioctl(fd,...);
有什么建议吗?