Maison > développement back-end > Golang > le corps du texte

Pourquoi l'ajout à un fichier entraîne-t-il une erreur « Descripteur de fichier incorrect » dans Go ?

Susan Sarandon
Libérer: 2024-11-11 15:56:03
original
758 Les gens l'ont consulté

Why Does Appending to a File Result in a

Descripteur de fichier incorrect rencontré lors de la tentative d'ajout de fichier

Lorsque vous essayez d'ajouter un fichier de journalisation dans une routine Go, vous pouvez rencontrer l'erreur "écrire ./log.log : mauvais descripteur de fichier". Malgré l'existence du fichier et les autorisations appropriées (666), ce problème persiste.

Initialement, la cause était soupçonnée d'être un accès simultané au fichier par plusieurs routines go. Cependant, l'implémentation d'un mutex n'a pas réussi à résoudre le problème.

Solution

La résolution réside dans l'ajout de l'indicateur O_WRONLY lors de l'ouverture du fichier :

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

Explication

Selon la documentation Linux pour open, l'un des trois modes d'accès (O_RDONLY, O_WRONLY ou O_RDWR) doit être spécifié. Ces modes demandent respectivement l'ouverture du fichier en lecture seule, en écriture seule ou en lecture/écriture.

Par défaut, le descripteur de fichier est ouvert en mode lecture seule, comme le confirme le code suivant dans / usr/local/go/src/syscall/zerrors_linux_amd64.go:

O_RDONLY                         = 0x0
O_RDWR                           = 0x2
O_WRONLY                         = 0x1
Copier après la connexion

Par conséquent, spécifier explicitement O_WRONLY garantit que le fichier est ouvert en mode écriture seule, résolvant le problème initial.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal