首页 > 后端开发 > Golang > 为什么在 Go 中追加到文件会导致'错误文件描述符”错误?

为什么在 Go 中追加到文件会导致'错误文件描述符”错误?

Susan Sarandon
发布: 2024-11-11 15:56:03
原创
805 人浏览过

Why Does Appending to a File Result in a

尝试文件追加时遇到错误的文件描述符

当尝试在 Go 例程中追加到日志文件时,您可能会遇到以下错误“写入./log.log:错误的文件描述符”。尽管该文件存在并且具有适当的权限(666),但此问题仍然存在。

最初怀疑原因是多个 go 例程并发文件访问。然而,实现互斥体未能解决问题。

解决方案

解决方案在于在打开文件时添加 O_WRONLY 标志:

if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }
登录后复制

说明

根据 Linux 的 open 文档,必须指定三种访问模式(O_RDONLY、O_WRONLY 或 O_RDWR)之一。这些模式分别请求以只读、只写或读/写方式打开文件。

默认情况下,文件描述符以只读模式打开,如 / 中的以下代码所确认usr/local/go/src/syscall/zerrors_linux_amd64.go:

O_RDONLY                         = 0x0
O_RDWR                           = 0x2
O_WRONLY                         = 0x1
登录后复制

因此,显式指定 O_WRONLY 可确保文件以只写模式打开,解决了最初的问题。

以上是为什么在 Go 中追加到文件会导致'错误文件描述符”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板