Heim > Artikel > Backend-Entwicklung > Warum erhalte ich beim Anhängen an eine Go-Logging-Datei die Fehlermeldung „Ungültiger Dateideskriptor“?
Probleme mit Dateideskriptoren in Golang: „Fehlerhafter Dateideskriptor“ behoben
Beim Versuch, innerhalb einer Go-Routine an eine Protokolldatei anzuhängen, Entwickler Möglicherweise tritt der Fehler „Ungültiger Dateideskriptor“ auf. Dieses Problem kann besonders rätselhaft sein, wenn die Datei vorhanden ist und über entsprechende Berechtigungen verfügt.
Anfangs scheint es, dass mehrere Routinen, die gleichzeitig versuchen, die Datei zu öffnen, das Problem verursachen könnten. Doch auch nach der Implementierung eines Mutex, um dies zu verhindern, bleibt derselbe Fehler bestehen.
Die Lösung besteht darin, das O_WRONLY-Flag zur Dateiöffnungsanweisung hinzuzufügen. Standardmäßig öffnet der Öffnungsvorgang die Datei im schreibgeschützten Modus. Ohne explizite Angabe eines Nur-Schreiben-Flags schlägt jeder Versuch, in die Datei zu schreiben, mit dem Fehler „Bad File Descriptor“ fehl.
Hier ist eine modifizierte Version des Codeausschnitts, der das O_WRONLY-Flag enthält:
if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { panic(err) }
Mit dieser Änderung wird die Datei sowohl mit Anhänge- als auch mit Schreibberechtigung geöffnet, wodurch der Fehler „Bad File Descriptor“ behoben wird und ein erfolgreiches Schreiben in die Protokolldatei möglich ist.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich beim Anhängen an eine Go-Logging-Datei die Fehlermeldung „Ungültiger Dateideskriptor“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!