Оказывается, все это непонимание между open () и fopen () проистекает из глючного драйвера I2C в ядре Linux 2.6.14 на ARM. Backporting работающего битового драйвера решил основную причину проблемы, которую я пытался устранить здесь.
Я пытаюсь выяснить проблему с драйвером последовательного устройства в Linux (I2C). Похоже, что при добавлении временных пауз ОС (снов) между записью и чтением на устройстве все работает ... (намного) лучше.
В стороне: Природа I2C заключается в том, что каждый байт, считываемый или записываемый мастером, распознается устройством на другом конце провода (ведомом) - вещи, улучшающие паузы, побуждают меня думать о драйвере как о работать асинхронно - то, что я не могу смириться с тем, как работает шина. Anyhoo ...
Я бы хотел очистить запись, чтобы быть уверенным (вместо использования фиксированной длительности паузы), или как-то проверить, что запись / чтение Транзакция завершена в многопоточной дружественной форме.
Проблема с использованием fflush(fd);
состоит в том, что для указания потокового указателя (а не дескриптора файла) требуется 'fd', т.е.
FILE * fd = fopen("filename","r+");
... // do read and writes
fflush(fd);
Моя проблема в том, что мне требуется использование ioctl()
, в котором не используется указатель потока. т.е.
int fd = open("filename",O_RDWR);
ioctl(fd,...);
Предложения