Golang mauvais descripteur de fichier
Je suis un mauvais descripteur de fichier lorsque vous essayez d'ajouter à un fichier de journalisation dans ma routine.
write ./log.log: bad file descriptor
Le fichier existe et a 666 pour les autorisations. Au début, je pensais bien peut-être que c'est parce que chacun d'eux est en essayant d'ouvrir le fichier en même temps. J'ai mis en place un mutex pour essayer d'éviter cela, mais eu le même problème donc je l'ai enlevé.
logCh := make(chan string, 150)
go func() {
for {
msg, ok := <-logCh
if ok {
if f, err := os.OpenFile("./log.log", os.O_APPEND, os.ModeAppend); err != nil {
panic(err)
} else {
logTime := time.Now().Format(time.RFC3339)
if _, err := f.WriteString(logTime + " - " + msg); err != nil {
fmt.Print(err)
}
f.Close()
}
} else {
fmt.Print("Channel closed! \n")
break
}
}
}()
source d'informationauteur Jared Mackey
Vous devez vous connecter pour publier un commentaire.
Vous devez ajouter le
O_WRONLY
drapeau :À expliquer, voici la documentation de linux pour ouvrir: http://man7.org/linux/man-pages/man2/openat.2.html :
Si vous consultez le fichier /usr/local/go/src/syscall/zerrors_linux_amd64.aller:660, vous pouvez voir que:
Donc, par défaut, vous obtenez un fichier en lecture seule descripteur.