Maison >développement back-end >Golang >Pourquoi la fonction « os.OpenFile » génère-t-elle une erreur « descripteur de fichier incorrect » lors de l'ajout à un fichier journal dans Go ?

Pourquoi la fonction « os.OpenFile » génère-t-elle une erreur « descripteur de fichier incorrect » lors de l'ajout à un fichier journal dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-11 03:53:03800parcourir

Why is the `os.OpenFile` function throwing a

Descripteur de fichier incorrect dans Golang lors de l'ajout à un fichier de journalisation

Lors de la tentative d'ajout à un fichier de journalisation dans une routine Go, les utilisateurs peuvent rencontrer l'erreur suivante :

write ./log.log: bad file descriptor

Même si le fichier cible existe et dispose des autorisations appropriées, le problème persiste. Les premières tentatives pour résoudre le problème à l'aide d'un mutex ont échoué.

Solution

La résolution réside dans l'ajout de l'indicateur O_WRONLY à l'appel os.OpenFile :

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

Explication

Selon la documentation Linux sur open, l'un des modes d'accès suivants doit être inclus dans l'argument flags : O_RDONLY, O_WRONLY ou O_RDWR. Ceux-ci demandent l'ouverture du fichier en mode lecture seule, écriture seule ou lecture/écriture, respectivement.

Par défaut, l'appel os.OpenFile de Go ouvre le fichier en mode lecture seule. A ce titre, il est nécessaire de spécifier explicitement O_WRONLY pour autoriser l'écriture dans le fichier de journalisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn