“file.sync = true”有什么作用?

时间:2012-01-20 22:59:37

标签: ruby file

我查看了文档,但似乎无法找到相关部分。任何人都可以在下面的代码中告诉我对sync的调用是什么吗?

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

3 个答案:

答案 0 :(得分:19)

设置文件的同步模式。

这会影响将来的操作并导致输出在没有块缓冲的情况下写入。

如果f.tty?为真,即如果文件连接到类似控制台的设备,则输出不是块缓冲的。但是当输出转到管道或文件时,f.tty?将为false,I / O库将切换到块缓冲,,即在缓冲区中累积输出并仅在以下情况下写入文件关闭,程序退出,或缓冲区填满。这样更快,最终结果也是一样。

设置f.sync = true会使此开关失败。如果管道的输出连接到实际上是控制台的某个东西或以某种方式交互或者正在主动监视文件的内容,这可能很有用。

答案 1 :(得分:4)

基本上,它会立即将缓冲在内存中的所有数据写入磁盘。

答案 2 :(得分:2)

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