Я просмотрел документы, но я не могу найти соответствующую часть. Может ли кто-нибудь сказать мне, для чего нужен вызов sync
в следующем коде?
fh = Tempfile.new('tmp')
fh.sync = true
Я просмотрел документы, но я не могу найти соответствующую часть. Может ли кто-нибудь сказать мне, для чего нужен вызов sync
в следующем коде?
fh = Tempfile.new('tmp')
fh.sync = true
Он устанавливает режим синхронизации файла.
Это влияет на будущие операции и заставляет вывод быть записанным без блочной буферизации.
Если f.tty?
истинно, то есть, если файл подключен к консольному устройству, то вывод не блокируется блоком. Но когда вывод идет в канал или файл, f.tty?
будет ложным, а библиотека ввода-вывода переключится на буферизацию блока, то есть накапливает вывод в буфере и записывает его только в том случае, если файл закрыт, программа завершает работу, или буфер заполняется. Это быстрее и конечный результат тот же.
Настройка f.sync = true
поражает этот переключатель. Это может быть полезно, если вывод канала подключен к тому, что на самом деле является консолью или каким-то образом интерактивным, или если содержимое файла активно контролируется.
В принципе, он немедленно записывает любые данные, буферизированные в память на диск.
Tempfile наследуется от IO. Из IO.sync
docs:
ios.sync -> true or false
------------------------------------------------------------------------------
Returns the current ``sync mode'' of ios. When sync mode is true, all
output is immediately flushed to the underlying operating system and is not
buffered by Ruby internally. See also IO#fsync.
f = File.new("testfile")
f.sync #=> false