去os.Truncate()不重置文件光标

时间:2015-09-05 10:49:30

标签: go

我最近尝试使用os.Truncate参数为0来清除文件的内容,然后将修改后的版本重写到其中(我知道这是一种非常不安全的做法,但文件的内容对我来说并不重要)。

令我震惊的是Truncate没有重置文件的光标,所以当我写回文件时,我最后得到一个前缀为一堆空字节的文件(对应于前面内容的大小),除非事先使用file.Seek(0, 0)

所以我的问题是:这是一种语言的错误,在执行该功能时被遗忘的东西,还是故意的,并且出于某种神秘的原因它是一种理想的行为?可能是什么神秘的原因?

我正在使用go版本go1.3.3 linux / amd64

1 个答案:

答案 0 :(得分:6)

这是期望的行为:Go实现模仿C的工作原理*。来自ftruncate(2)的手册页:

  

文件偏移量未更改。

*从技术上讲,这是因为Go实现executes the ftruncate(2) syscall