gpt4 book ai didi

go - `os.O_APPEND` 和 `os.ModeAppend` 有什么区别?

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:12 24 4
gpt4 key购买 nike

我们可以在 os.OpenFile 指定 flagperm .

他们有非常相似的选项,O_APPENDModeAppend .它们有什么区别?

f, _ := os.OpenFile("access.log", os.O_APPEND|os.O_CREATE, os.ModeAppend|0644)

最佳答案

flag 指定用于打开文件的系统调用的标志,而 perm 设置文件的文件模式。文件模式包括文件的权限和类型,例如。符号链接(symbolic link)、目录等...

os.O_APPEND 告诉底层操作系统,您对该文件处理程序执行的所有写入调用都应始终附加到文件,因此您无需设置偏移量即可写入正确的部分的文件。

ModeAppend 将文件模式设置为追加。这意味着这个文件只能通过附加到它来修改,不能通过重写文件内容来修改。具体细节取决于您使用的操作系统和文件系统。我相信 Plan 9,通过忽略对文件的任何写入调用的偏移量并始终附加到它来实现它,而在 linux 中,这意味着文件只能以附加模式打开以进行写入。我认为在大多数 Linux 发行版上,您需要成为 root 用户才能将文件模式设置为追加。

在 99.99% 的情况下,您只想使用 perm 来设置文件权限 rwx。在你的情况下,如果你想打开一个文件并附加到它,你应该使用:

// os.O_WRONLY tells the computer you are only going to writo to the file, not read
// os.O_CREATE tells the computer to create the file if it doesn't exist
// os.O_APPEND tells the computer to append to the end of the file instead of overwritting or truncating it
f, err := os.OpenFile("access.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0644)

您可能只是忽略了 os.OpenFile 上的返回错误以将示例放到网上,但您应该习惯于始终检查错误。你不知道有多少用户在开始使用 go 时遇到了麻烦,因为他们忽略了错误。有时是一些愚蠢且容易修复的错误,例如打字错误,但如果您忽略该错误,您将不知道问题出在哪里。

您可以阅读更多关于附加文件模式的信息 here .

关于go - `os.O_APPEND` 和 `os.ModeAppend` 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205448/

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