Lors de l'utilisation de os.FileMode pour définir les autorisations de fichiers, les utilisateurs peuvent rencontrer des écarts entre les modes de fichier attendus et réels. Cet article explore les subtilités de la conversion des autorisations de diverses représentations en indicateurs de fichier.
L'utilisation de nombres décimaux sans zéros non significatifs, tels que 700, est traitée différemment à partir de représentations octales comme 0700. Lorsque 700 est interprété sans le zéro non significatif, il n'est pas considéré comme un nombre octal. Au lieu de cela, il est analysé comme un littéral entier avec la valeur 448 (7 64 0 8 0 * 1). Une fois convertie en binaire à l'aide de cette représentation entière, la valeur résultante est 1-010-111-100. Le bit supplémentaire en première position, qui ne fait pas partie du mode de fichier Linux 9 bits attendu, provoque des divergences.
OS.FileMode de Go attend des représentations octales du fichier modes. Lorsqu'une représentation octale est utilisée, telle que 0700, elle est interprétée comme un nombre en base 8, ce qui donne une valeur de 448. Les 9 bits les moins significatifs de cette valeur correspondent aux autorisations de fichier, tandis que les bits restants sont définis et indiquent des autorisations spéciales. fonctionnalités de fichiers qui ne sont pas pertinentes pour cette discussion.
La confusion survient car la représentation binaire 1-010-111-100 de 700 décimales ne correspond pas aux autorisations attendues 0700 . Cela est dû au bit supplémentaire mentionné précédemment. Dans ce cas, cela donne des autorisations de 0254 (-rw-r-xr-) au lieu de 0274 (-rwx------) comme on pouvait s'y attendre.
Pour résoudre ce problème, il est essentiel d'utiliser des zéros non significatifs lors de la spécification de nombres octaux pour FileMode. Cela garantit que Go interprète l'entrée comme une valeur octale et non comme un nombre décimal. En suivant cette directive, vous pouvez éviter les divergences dans les autorisations de fichiers.
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!