os.O_TRUNC 有什么作用?

Lam*_*ine 4 module function func writefile go

func OpenFile(name string, flag int, perm FileMode) (*File, error)

f, err := os.OpenFile("notes.txt", os.O_RDWR|os.O_CREATE|O_TRUNC, 0755)
Run Code Online (Sandbox Code Playgroud)

“O_TRUNC”是否在写入前清空整个文件?“截断”是什么意思?

另外,该函数ioutil.WriteFile()在写入之前是否清空了整个文件?

col*_*tor 5

之前os.O_TRUNC使用“如果可能”这个词的定义存在一些混淆- 请参见此处

今天的文档如下:

O_TRUNC  int = syscall.O_TRUNC  // truncate regular writable file when opened.
Run Code Online (Sandbox Code Playgroud)

所以

“O_TRUNC”在写入之前是否清空了整个文件?

是的。它基本上破坏了文件的内容 - 如果文件路径已经存在(并且是文件或现有文件的符号链接)。

同样来自ioutil.WriteFile 文档

... WriteFile 在写入之前将其截断。

  • 对于普通文件,文件在打开时(即写入之前)会被截断。在一般情况下,可以在写入之前任意长时间。您可以通过使用 O_TRUNC 打开文件并关闭它而不写入任何内容来截断文件。 (2认同)