「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go の FileMode 関数は 8 進数と 10 進数のアクセス許可の変換をどのように処理しますか?

Go の FileMode 関数は 8 進数と 10 進数のアクセス許可の変換をどのように処理しますか?

2024 年 11 月 16 日に公開
ブラウズ:864

How Does Go\'s FileMode Function Handle Octal and Decimal Permissions Conversion?

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 表現の未使用領域にあります。

さらに明確にするために、アクセス許可のバイナリ表現を分解してみましょう:

  • 1-010 -111-100 (8 進数の 274): これは、期待していた正しい権限を表します。 (--w-rwxr--).
  • 1-010-111-100-000000000000 (拡張バイナリ表現): 10 番目の位置の先頭ビットが設定されていないため、期待されるPermissions.
  • 1-010-111-100-000000000001 (先頭のビットが設定されている): この拡張バイナリ表現は、確認したアクセス許可 (--w-r-xr--) に対応します。 .

したがって、整数から os.FileMode に変換する場合、整数表現が 10 進数または明示的に指定された 8 進数であることを確認することが重要です。これにより、ファイルに誤った権限が設定される可能性のある意図しない変換が回避されます。

リリースステートメント この記事は次の場所に転載されています: 1729743618 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3