Golang中OpenFile常量的含义解析
Golang中OpenFile常量的含义解析
f, err := os.OpenFile("text.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
这里的 0644 是什么意思?
如何理解 O_WRONLY 即"以只写模式打开文件"?意思是它只为了写入而打开文件吗?我们不能用这个文件来读取吗?
请查阅 os 文档 获取更多详情,简单来说是通过 或运算 向 OpenFile 传递标志位,表示:若文件不存在则创建 (os.O_CREATE)、若文件存在则追加写入 (os.O_APPEND,即不覆盖原内容)、并以只写模式打开文件 (os.O_WRONLY)。
关于 0644,这是文件权限设置。如果您不熟悉数字权限表示法,请查阅 文件系统权限 页面的「数字表示法」章节。
更多关于Golang中OpenFile常量的含义解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这个计算器,连同信息和代码示例标签,可能会有所帮助:
http://permissions-calculator.org/
0644 是一个非常常见的设置。它允许文件所有者拥有读写权限,而其他所有人只有只读权限。
搜索"unix权限"可以找到许多解释其工作原理的页面。例如:
Linux权限介绍 | DigitalOcean
Linux 是一个多用户操作系统,基于 Unix 的文件所有权和权限概念,在文件系统级别提供安全性。如果您计划提高 Linux 技能,必须对…有适当的理解。
在Go语言中,os.OpenFile函数的第三个参数是文件权限模式,使用Unix风格的八进制表示法。0644表示文件权限设置:
- 第一个数字
0表示八进制前缀 - 第二个数字
6表示文件所有者权限:读写权限(4+2=6) - 第三个数字
4表示同组用户权限:只读权限(4) - 第四个数字
4表示其他用户权限:只读权限(4)
所以0644表示:文件所有者可读写,同组用户和其他用户只能读。
关于os.O_WRONLY标志,你的理解完全正确。os.O_WRONLY表示以只写模式打开文件,这意味着:
- 文件只能用于写入操作
- 不能从该文件读取数据
- 如果尝试读取,会返回错误
示例代码演示:
package main
import (
"fmt"
"os"
)
func main() {
// 以只写模式创建/打开文件
f, err := os.OpenFile("test.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("打开文件错误:", err)
return
}
defer f.Close()
// 写入数据 - 这是允许的
_, err = f.WriteString("这是一条测试日志\n")
if err != nil {
fmt.Println("写入错误:", err)
}
// 尝试读取 - 这会失败
buffer := make([]byte, 100)
_, err = f.Read(buffer)
if err != nil {
fmt.Println("读取错误:", err) // 输出: 读取错误: bad file descriptor
}
}
如果你需要同时读写文件,应该使用os.O_RDWR标志:
// 以读写模式打开文件
f, err := os.OpenFile("test.log", os.O_APPEND|os.O_CREATE|os.O_RDWR, 0644)
常用的文件打开标志:
os.O_RDONLY:只读os.O_WRONLY:只写os.O_RDWR:读写os.O_APPEND:追加模式os.O_CREATE:文件不存在时创建os.O_TRUNC:打开时清空文件


