Golang: Resolving "Bad File Descriptor" Error When Appending to Logging File
When attempting to append to a logging file within a Go routine, some developers encounter a "bad file descriptor" error. Despite ensuring the file exists and has appropriate permissions, the issue persists.
Analysis and Solution
Further investigation reveals that the error arises due to the absence of the O_WRONLY flag in the OpenFile function call. By default, the file descriptor obtained is read-only.
To rectify this issue, add the O_WRONLY flag to the os.OpenFile function call. Here's the corrected code:
if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }
As documented in the Linux open function man page, one of the following access modes must be specified: O_RDONLY, O_WRONLY, or O_RDWR. These flags indicate read-only, write-only, or read/write access, respectively. In this case, using O_APPEND alone results in a read-only file descriptor, leading to the error. Adding the O_WRONLY flag ensures a write-only file descriptor.
The above is the detailed content of How to Fix 'Bad File Descriptor' Error When Appending to Logging File in Golang?. For more information, please follow other related articles on the PHP Chinese website!