2017-09-14 17 views
0

たとえば、FAT32パーティションでは、最大ファイルサイズは4GBです。 vimで5GBのファイルを作成してファイルを保存してもう一度開くと、コンソールの出力が階段のように壊れてしまいました。私には3つの質問があります。ファイルのサイズがファイルシステムの最大サイズを超えている場合、どうなりますか?

  1. ファイルシステムの最大サイズを超えた場合、どうなりますか?

  2. 私の場合、なぜ壊れますか?

  3. Unixシステムコールでは、stat()は2GB(2^31-1)まで成功します。これはファイルシステムと関係がありますか? stat()のデータの限界とファイルシステムの各機能の制限との間には関係がありますか?

+1

'write'は少し紛らわしい' ENOSPC'( "スペースはデバイスに残っていません")で失敗します。 3回目以降、そのエラーで 'cp'が失敗し、USBキーを無駄にしてしまったので、私がコピーしたファイルのサイズがデバイスに残っているスペースについて考える前に4GBを超えているかどうかを確認しました。 –

答えて

1

ファイルのサイズは、ファイルシステムの最大サイズを超えた場合、どうなりますか?

これは決して起こることはありません。実際には何らかのシステムコール(たぶんwrite(2) ...)が失敗しているということです。そのコードはその場合に注意しなければなりません。

FAT32ファイルシステムは、ファイルの最大サイズを2ギガバイトに制限しています。より多くの(またはsplit(1)大きなファイルをFAT32フォーマットのUSBキーにコピーする前に小さな塊にしたい)場合は、USBキーでより良いfile systemを使用してください。

(彼らはいくつかの障害が発生しwrite(2)を行いますので、例えば)fflush(3)fprintf(3)fclose(3)(および他のほとんどの標準機能)が失敗する可能性があること<stdio.h>の通知を使用している場合。あなたのpseudoterminalは、いくつかの壊れた状態であったため、

コンソール出力は階段おそらく

のように壊れていました。 stty(1),reset(1),termios(3)を参照し、tty demystifiedを読んでください。あなたはstat(2)を誤解している

- Unixのシステムコールで

は、STAT()は2ギガバイト(1 2^31)まで成功することができます。ドキュメントをもう一度お読みください

Advanced Linux Programmingを入力してからsyscalls(2)を読んでください。

私はvimの振る舞いを理解するためにvim

で5ギガバイトのファイルを作成することができたが、それはfree softwareである(そのソースコードを勉強し、あなたは、おそらくその検討すべきことができます最初にそのドキュメントを読んでコード)。

また、を使用して、いくつかのコマンドまたはプロセスによってどのシステムコールが行われたかを理解することもできます。

+0

ファイルシステム固有です。 FAT32はファイルサイズを2Gbに制限します。あなたのUSBキーをより良いファイルシステムでフォーマットする –

+0

ほとんどの64ビットLinuxシステムでは、libcの 'stat'関数は' stat64'を呼び出しています –

+2

'stat()'は64ビットシステムの64ビット変数のサイズを返しますifあなたはstat()のために64ビットタイプを使用しない32ビットシステム上にあります。通常、 '#define _FILE_OFFSET_BITS = 64'でコンパイルして、stat()が64ビットのバリアントを透過的に使用できるようにします。 – nos

関連する問題