Ситуация такая: для своего приложения переопределил функции __write и __read для работы с fread, fwrite ... Открываю файл FILE *pf = fopen("/uart2", "r+"); Если записать в файл, то запись выполнится нормально, но считать из него уже будет нельзя, и наоборот, если хоть раз считать, то не запишешь. Полез в исходники иаровских библиотек и нашёл там строчки
...
if ((str->_Mode & (_MOPENW | _MREAD | _MWIDE)) != _MOPENW)
{ /* can't write after read */
str->_Mode |= str->_Mode & _MWIDE
? _MERR : _MERR | _MBYTE;
return (-1);
...
}
так же и для чтения
...
else if ((str->_Mode & (_MOPENR | _MWRITE | _MWIDE)) != _MOPENR)
{ /* can't read after write */
str->_Mode |= str->_Mode & _MWIDE
? _MERR : _MERR | _MBYTE;
return (-1);
}
...
Дальше в исходниках либ нашёл, что флаги _MWRITE и _MREAD ставятся после любой успешной записи/чтения файла и больше не снимаются :(
Это получается, что файл как не открывай, всё равно на запись и чтение работать не будет?