Мне просто интересно, почему в Perl нет функции «флеша». «Perldoc -f закрыть» говоритДелает ли закрытие файла подразумеваемым flushing в Perl под Unix/MS-Windows/MacOs?
близко Закрывает файл или трубу, связанный с дескриптором, флеши буферы ввода-вывода, и закрывает дескриптор системного файла.
Но страница руководство Unix «человек 2 близко» говорит:
Удачные близко не гарантирует, что данные были успешно сохранены на диск, так как ядро отсрочивает пишет. Для не существует файловой системы для сброса буферов при закрытии потока. Если вы должны быть уверены, что данные физически сохранены, используйте fsync (2). (Это будет зависеть от диска аппаратного обеспечения в этой точке.)
Теперь, насколько я понимаю, нет функции FSYNC в Perl. Конечно, закрытие Perl могло бы вызвать fsync(). Но даже тогда «человек 2 близко» говорит, что это зависит от аппаратного обеспечения, и я не знаю, что происходит на других ОС. Поэтому мой вопрос. Я хочу быть уверенным, что буферы очищены.
Спасибо.Итак, мораль этой истории заключается в том, что, будучи программистом, вы никогда не сможете полностью убедиться, что ваши данные безопасны на диске, если вы не отключите устройство? Что делать, если вы программист базы данных и должен быть на 100% уверен, что что-то вечно на диске? Заказ клиента, например? – ubuplex
@ubuplex Единственный способ гарантировать, что с полной уверенностью будет включать полный аудит всего стека ввода-вывода из оборудования физического накопителя вверх; на каждом слое есть механизмы кэширования. См. Http://www.postgresql.org/docs/current/static/wal-reliability.html для более подробного обсуждения темы. –