
ロバートラブからLinuxシステムプログラミング(2007、O'Reilly)、最初の段落(1章、10ページ)に、次の内容が記載されています。
ファイルの場所の最大サイズは、ファイルを保存するために使用されるCタイプのサイズ(最新のLinuxでは64ビット)によってのみ制限されます。
しかし、次の段落では、彼はこう述べています。
ファイルが空である可能性があるため(長さ0)、有効なバイトが含まれていません。最大ファイル位置と同様に、最大ファイル長は、Linuxカーネルがファイルを管理するために使用するCタイプのサイズによってのみ制限されます。
私はこれがおそらく非常に基本的なものであることを知っていますが、彼はファイルサイズが次の影響を受けると言います。文書データ型または整数データの種類?
答え1
彼は、最大値が(2 ^ 64) - 1 unsignedまたは(2 ^ 63) - 1 signed(1ビットが符号+ / -を保持している)の64ビットタイプに制限されていると述べています。
タイプはではありません。FILE
これは、ファイルオフセットを追跡するために実装が使用する方法です。off_t
兆候64ビットタイプ。1 (2^63) - 1 = 9223372036854775807. 1TBが1000^4バイトの場合、約920万TBに相当します。おそらく、符号付き型を使用する理由は、-1値(エラーなどの場合)または相対オフセットを保持できるためです。
fseek()
同様でftell()
署名された関数を使用するlong
ことも64ビットGNUシステムでは64ビットです。
1.types.h
課を参照してください。typesizes.h
/usr/include/bits