首頁  >  文章  >  後端開發  >  為什麼在 Go 中追加到檔案會導致「錯誤檔案描述符」錯誤?

為什麼在 Go 中追加到檔案會導致「錯誤檔案描述符」錯誤?

Susan Sarandon
Susan Sarandon原創
2024-11-11 15:56:03715瀏覽

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 { /*[...]*/ }

說明

說明

O_RDONLY                         = 0x0
O_RDWR                           = 0x2
O_WRONLY                         = 0x1

根據Linux對於open的文檔,必須指定三種存取模式(O_RDONLY、O_WRONLY 或 O_RDWR)之一。這些模式分別請求以唯讀、只寫或讀/寫方式開啟檔案。

預設情況下,檔案描述子以唯讀模式打開,如/ 中的以下程式碼所確認usr/local/go/src/syscall/zerrors_linux_amd64.go:因此,明確指定O_WRONLY 可確保檔案在以下位置開啟只寫入模式,解決了最初的問題。

以上是為什麼在 Go 中追加到檔案會導致「錯誤檔案描述符」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn