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 進数に変換されます。ただし、作成されたファイルのアクセス許可は、バイナリ表現に対応する 254 であることがわかりました。 --w-r-xr--.
この矛盾は、バイナリ表現で 10 番目の先頭の 1 ビットが設定されていることが原因であると考えられます。このビットは、os.FileMode 表現の未使用領域にあります。
さらに明確にするために、アクセス許可のバイナリ表現を分解してみましょう:
したがって、整数から os.FileMode に変換する場合、整数表現が 10 進数または明示的に指定された 8 進数であることを確認することが重要です。これにより、ファイルに誤った権限が設定される可能性のある意図しない変換が回避されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3