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

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

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

所以我的问题是:这是语言的错误,是在实现该功能的过程中被遗忘的东西,还是有意为之,出于某种神秘的原因,这是一种理想的行为?那个神秘的原因可能是什么?

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


梦里花落0921
浏览 411回答 1
1回答

胡子哥哥

这是理想的行为:Go 实现模仿 C 的工作方式*。从ftruncate(2)的手册页:文件偏移量没有改变。* 从技术上讲,这是因为 Go 实现执行了ftruncate(2)syscall。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go