Warum löst die Funktion „os.OpenFile' beim Anhängen an eine Protokolldatei in Go den Fehler „Fehlerhafter Dateideskriptor' aus?

Patricia Arquette
Freigeben: 2024-11-11 03:53:03
Original
764 Leute haben es durchsucht

Why is the `os.OpenFile` function throwing a

Ungültiger Dateideskriptor in Golang beim Anhängen an eine Protokolldatei

Beim Versuch, innerhalb einer Go-Routine an eine Protokolldatei anzuhängen, kann bei Benutzern der folgende Fehler auftreten:

write ./log.log: bad file descriptor
Nach dem Login kopieren

Obwohl sichergestellt wurde, dass die Zieldatei vorhanden ist und über die entsprechenden Berechtigungen verfügt, besteht das Problem weiterhin. Erste Versuche, das Problem mithilfe eines Mutex zu beheben, schlugen fehl.

Lösung

Die Lösung liegt im Hinzufügen des O_WRONLY-Flags zum os.OpenFile-Aufruf:

if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }
Nach dem Login kopieren

Erklärung

Laut der Linux-Dokumentation zu open muss einer der folgenden Zugriffsmodi im Flags-Argument enthalten sein: O_RDONLY, O_WRONLY oder O_RDWR. Diese erfordern das Öffnen der Datei im schreibgeschützten, schreibgeschützten bzw. Lese-/Schreibmodus.

Standardmäßig öffnet der os.OpenFile-Aufruf von Go die Datei im schreibgeschützten Modus. Daher ist es notwendig, O_WRONLY explizit anzugeben, um das Schreiben in die Protokolldatei zu ermöglichen.

Das obige ist der detaillierte Inhalt vonWarum löst die Funktion „os.OpenFile' beim Anhängen an eine Protokolldatei in Go den Fehler „Fehlerhafter Dateideskriptor' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage