gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:26:36 34 4
gpt4 key购买 nike

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

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

所以我的问题是:这是语言的错误,是在实现该功能期间被遗忘的东西,还是故意的并且出于某种神秘原因这是期望的行为?那个神秘的原因可能是什么?

我用的是go版本go1.3.3 linux/amd64

最佳答案

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

The file offset is not changed.

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

关于Go os.Truncate() 不重置文件光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32412194/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com