Я читаю журнал на linux.
регистратор открыть файл по init.
и напишите в этот файл дескриптор при запуске программы.
если файл журнала будет удален после создания дескриптора файла,
не будет обнаружено никаких исключений/ошибок.
я попробовал:ofstream - определить, был ли файл удален между открытием и закрытием
out.fail()
!out.is_open()
у меня есть Google это и найти этот пост.
http://www.daniweb.com/forums/thread23244.html
, так что теперь я понимаю, что даже если файл был удален с помощью rm. он по-прежнему существует, он просто несвязался.
Каков наилучший способ для этого?
1. это приложение журнала, поэтому производительность - это проблема, я не хочу использовать stat() для каждой записи.
2. Мне все равно, если какая-либо строка в файлах журнала будет отсутствовать в начало
3. пользователю разрешено удалять файл журнала, чтобы начать новый. Регистратор должен снова открыть файл.
Какую функцию вы используете для записи в файл? . для fwrite вы можете проверить результат возврата. И если размер отличается от ожидаемого, то повторно открыть (создать) файл .. –
@ Dyatlov тест результат не поможет, потому что файл существует, он просто отсоединен, запись выполнена.так и проверка файлов, спасибо – jojo
Я столкнулся с этим, исследуя ту же проблему, за исключением того, что процесс, выполняющий удаление, был logrotate - мой случай намного чище для исправления - logrotate имеет опцию - copytruncate - который будет разрешите эту проблему с протоколированием, не удалив файл вообще. –