Что делает "file.sync = true"?

Я просмотрел документы, но я не могу найти соответствующую часть. Может ли кто-нибудь сказать мне, для чего нужен вызов sync в следующем коде?

fh = Tempfile.new('tmp')
fh.sync = true 

Ответы

Ответ 1

Он устанавливает режим синхронизации файла.

Это влияет на будущие операции и заставляет вывод быть записанным без блочной буферизации.

Если f.tty? истинно, то есть, если файл подключен к консольному устройству, то вывод не блокируется блоком. Но когда вывод идет в канал или файл, f.tty? будет ложным, а библиотека ввода-вывода переключится на буферизацию блока, то есть накапливает вывод в буфере и записывает его только в том случае, если файл закрыт, программа завершает работу, или буфер заполняется. Это быстрее и конечный результат тот же.

Настройка f.sync = true поражает этот переключатель. Это может быть полезно, если вывод канала подключен к тому, что на самом деле является консолью или каким-то образом интерактивным, или если содержимое файла активно контролируется.

Ответ 2

В принципе, он немедленно записывает любые данные, буферизированные в память на диск.

Ответ 3

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