Мое приложение использует lseek()
для поиска нужной позиции для записи данных.
Файл успешно открыт с помощью open()
, и мое приложение могло использовать lseek()
и write()
много раз.
В определенный момент времени для некоторых пользователей, которые трудно воспроизвести, lseek()
возвращает -1 с errno
, равным 9. Файл до этого не закрыт, а дескриптор файла (int) не сбрасывается.
После этого создается другой файл; open()
снова в порядке, lseek()
и write()
снова работают.
Чтобы сделать это еще хуже, этот пользователь попробовал всю последовательность снова, и все было хорошо.
Так что мой вопрос: может ли ОС по какой-то причине закрыть для меня дескриптор файла?
Что может вызвать это? Индекс файла или сканер файла какого-то рода?
Как лучше всего это решить; этот псевдокод является лучшим решением?
(не обращайте внимания на макет кода, создадим для него функции)
int fd=open(...);
if (fd>-1) {
long result = lseek(fd,....);
if (result == -1 && errno==9) {
close(fd..); //make sure we try to close nicely
fd=open(...);
result = lseek(fd,....);
}
}
Кто-нибудь сталкивался с чем-то похожим?
Резюме: поиск и запись файла работает нормально для данного fd и неожиданно возвращает errno = 9 без причины.