github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/archive/tar/format.go (about)

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package tar
     6  
     7  // Formatはtarアーカイブのフォーマットを表します。
     8  //
     9  // オリジナルのtarフォーマットはUnix V7で導入されました。
    10  // その後、V7フォーマットの制限を克服するために標準化または拡張を試みる複数の競合するフォーマットがありました。
    11  // 最も一般的なフォーマットは、USTAR、PAX、GNUフォーマットで、それぞれ独自の利点と制限があります。
    12  //
    13  // 次の表は、各フォーマットの機能を示しています:
    14  //
    15  //	                  |  USTAR |       PAX |       GNU
    16  //	------------------+--------+-----------+----------
    17  //	Name              |   256B | unlimited | unlimited
    18  //	Linkname          |   100B | unlimited | unlimited
    19  //	Size              | uint33 | unlimited |    uint89
    20  //	Mode              | uint21 |    uint21 |    uint57
    21  //	Uid/Gid           | uint21 | unlimited |    uint57
    22  //	Uname/Gname       |    32B | unlimited |       32B
    23  //	ModTime           | uint33 | unlimited |     int89
    24  //	AccessTime        |    n/a | unlimited |     int89
    25  //	ChangeTime        |    n/a | unlimited |     int89
    26  //	Devmajor/Devminor | uint21 |    uint21 |    uint57
    27  //	------------------+--------+-----------+----------
    28  //	string encoding   |  ASCII |     UTF-8 |    binary
    29  //	sub-second times  |     no |       yes |        no
    30  //	sparse files      |     no |       yes |       yes
    31  //
    32  // この表の上部は、 [Header] フィールドを示しており、各フォーマットが各文字列フィールドに許可される最大バイト数と、
    33  // 各数値フィールドを格納するために使用される整数型を報告します
    34  // (タイムスタンプは、Unixエポックからの秒数として格納されます)。
    35  //
    36  // 表の下部は、各フォーマットの特殊な機能を示しています。
    37  // たとえば、サポートされる文字列エンコーディング、サブセカンドタイムスタンプのサポート、スパースファイルのサポートなどがあります。
    38  //
    39  // Writerは現在、スパースファイルに対するサポートを提供していません。
    40  type Format int
    41  
    42  // Constants to identify various tar formats.
    43  const (
    44  	// Deliberately hide the meaning of constants from public API.
    45  	_ Format = (1 << iota) / 4
    46  
    47  	// FormatUnknownは、フォーマットが不明であることを示します。
    48  	FormatUnknown
    49  
    50  	// FormatUSTARは、POSIX.1-1988で定義されたUSTARヘッダーフォーマットを表します。
    51  	//
    52  	// このフォーマットは、ほとんどのtarリーダーと互換性がありますが、
    53  	// このフォーマットにはいくつかの制限があるため、一部の用途には適していません。
    54  	// 特に、スパースファイル、8GiBを超えるファイル、256文字を超えるファイル名、および非ASCIIファイル名をサポートできません。
    55  	//
    56  	// 参考:
    57  	//	http://pubs.opengroup.org/onlinepubs/9699919799/utilities/pax.html#tag_20_92_13_06
    58  	FormatUSTAR
    59  
    60  	// FormatPAXは、POSIX.1-2001で定義されたPAXヘッダーフォーマットを表します。
    61  	//
    62  	// PAXは、Typeflag TypeXHeaderを持つ特別なファイルを書き込むことで、USTARを拡張します。
    63  	// このファイルには、USTARの制限を克服するために使用される一連のキー-値レコードが含まれています。
    64  	// さらに、タイムスタンプのサブセカンド解像度を提供する機能もあります。
    65  	//
    66  	// 一部の新しいフォーマットは、独自のキーを定義し、関連する値に特定の意味を割り当てることで、PAXに独自の拡張機能を追加します。
    67  	// たとえば、PAXでのスパースファイルのサポートは、GNUマニュアルで定義されたキー(例:「GNU.sparse.map」)を使用して実装されています。
    68  	//
    69  	// 参考:
    70  	//	http://pubs.opengroup.org/onlinepubs/009695399/utilities/pax.html
    71  	FormatPAX
    72  
    73  	// FormatGNUは、GNUヘッダーフォーマットを表します。
    74  	//
    75  	// GNUヘッダーフォーマットは、USTARおよびPAX規格よりも古く、
    76  	// それらとの互換性はありません。
    77  	// GNUフォーマットは、任意のファイルサイズ、任意のエンコーディングと長さのファイル名、スパースファイルなどをサポートします。
    78  	//
    79  	// GNUフォーマットのアーカイブの解析ができるアプリケーションしかない場合を除き、PAXをGNUよりも選択することが推奨されます。
    80  	//
    81  	// 参考:
    82  	//	https://www.gnu.org/software/tar/manual/html_node/Standard.html
    83  	FormatGNU
    84  )
    85  
    86  func (f Format) String() string