事实证明,对open()与fopen()的整体误解源于ARM上Linux 2.6.14内核中的错误I2C驱动程序.向后移动一个工作位捣乱的驱动程序解决了我试图解决的问题的根本原因.
我试图弄清楚Linux(I2C)中串行设备驱动程序的问题.似乎通过在设备上的写入和读取之间添加定时OS暂停(休眠),事情起作用......(更好).
旁白:I2C的本质是主机读取或写入的每个字节都由线路另一端的设备(从机)确认 - 暂停改进的事情鼓励我将驱动程序视为异步工作 - 这是我的意思无法调和公交车的运作方式.Anyhoo ......
我想无论是想刷新写可以肯定(而不是使用固定的工期暂停),或以某种方式测试读/写事务已完成在多线程友好的方式.
使用的麻烦fflush(fd);是它需要'fd'是流指针(不是文件描述符),即
FILE * fd = fopen("filename","r+");
... // do read and writes
fflush(fd);
Run Code Online (Sandbox Code Playgroud)
我的问题是我需要使用,ioctl()而不使用流指针.即
int fd = open("filename",O_RDWR);
ioctl(fd,...);
Run Code Online (Sandbox Code Playgroud)
建议?