Что делает file.sync = true? - PullRequest
       0

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

15 голосов
/ 21 января 2012

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

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

Ответы [ 3 ]

20 голосов
/ 21 января 2012

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

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

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

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

4 голосов
/ 21 января 2012

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

2 голосов
/ 21 января 2012

Tempfile наследуется от IO.Из документов IO.sync:

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...