为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
梦里花落0921 2021-11-08 10:11:03
我最近尝试os.Truncate在将修改后的版本重新写入文件之前使用参数 0 来清除文件的内容(我知道这是一种非常不安全的做法,但文件的内容对我来说并不重要)。令我震惊的是,Truncate 并没有重置文件的光标,所以当我写回文件时,我最终得到了一个以一堆空字节为前缀的文件(对应于之前内容的大小),除非我使用file.Seek(0, 0)预先。所以我的问题是:这是语言的错误,是在实现该功能的过程中被遗忘的东西,还是有意为之,出于某种神秘的原因,这是一种理想的行为?那个神秘的原因可能是什么?我正在使用 go 版本 go1.3.3 linux/amd64
查看完整描述

1 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

这是理想的行为:Go 实现模仿 C 的工作方式*。从ftruncate(2)的手册页:

文件偏移量没有改变。

* 从技术上讲,这是因为 Go 实现执行了ftruncate(2)syscall


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 410 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信