Go での FileMode 関数のアクセス許可の解析
os.FileMode 関数は、フラグを設定する前にさまざまな形式からアクセス許可を変換します。これらの形式には、整数、8 進数表現、およびその他の形式が含まれる可能性があります。
整数から os.FileMode に変換する場合、関数は、整数が 8 進数で表現されるか 10 進数で表現されるかを明示的に識別しません。 10 進数表現は通常の整数として解釈されます。
数値の 8 進数表現は、Unix 系システムでファイルのアクセス許可を表すためによく使用されます。 Go で 8 進数を明示的に指定するには、リテラルの先頭にゼロを付けます。たとえば、0700 は 8 進数の 700 を表します。
注意すべき重要な点の 1 つは、os.FileMode がアクセス許可を 32 ビットの符号なし整数として表すことです。この整数の最下位 9 ビットは、標準の Unix ファイル許可構造に対応します。残りの 12 の最上位ビットは、特別なファイルの機能を示すために予約されています。
この例では、os.FileMode(700) を呼び出すと、バイナリ値 1-010-111-100 が返され、これを 8 進数に変換する必要があります。ただし、作成されたファイルのアクセス許可は、バイナリ表現 --w-r-xr-- に対応する 254 であることがわかりました。
この矛盾は、先頭の 1 ビットが10 番目の位置はバイナリ表現で設定されます。このビットは、os.FileMode 表現の未使用領域にあります。
さらに明確にするために、アクセス許可のバイナリ表現を分解してみましょう:
したがって、整数から os.FileMode に変換するときは、整数表現は、10 進数または明示的に指定された 8 進数のいずれかです。これにより、ファイルに誤った権限が設定される可能性のある意図しない変換が回避されます。
以上がGo の FileMode 関数は 8 進数と 10 進数のアクセス許可の変換をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。