Неизменяемый файл завершается ошибкой, если fd ранее не был закрыт - PullRequest
1 голос
/ 09 декабря 2011

Рассмотрим следующий сценарий: я открываю tar-файл (скажем, abc.tar.gz), записываю данные и до закрываю дескриптор файла, я пытаюсь извлечь тот же файл.

Я не могу этого сделать. Но если я распаковываю файл после закрытия fd, он работает нормально. Интересно, в чем может быть причина.

1 Ответ

2 голосов
/ 09 декабря 2011

Все файлы имеют позицию , где данные считываются или записываются. После записи в файл позиция находится в конце. Попытка чтения попытается прочитать с этой позиции. Вы должны изменить позицию в начале файла с помощью функции, подобной lseek.

Кроме того, вы открыли файл в режиме чтения и записи?

Редактировать

После прочтения ваших комментариев я вижу, что вы на самом деле не читаете файл из вашей программы, а из внешней программы. Тогда это может быть так просто, как если бы вы не сбрасывали файл на диск, что происходит автоматически при закрытии файла. Для этого вы можете проверить функцию fsync или, возможно, функцию sync.

...