1

fseek を使用して、非常に大きな (〜 500 GB) ファイルをステップ実行しようとしています。fseek の 2 番目のパラメーターであるオフセットは long int であるため、必要なオフセットが 2^31 - 1 より大きい場合を考慮する必要があります。これが私の解決策です。

    fseek(file,offset % LONG_MAX,SEEK_SET);;
    for (int i = 0; i < offset/LONG_MAX; i++)
    {
      fseek(file,LONG_MAX,SEEK_CUR);
    }

LONG_MAX は limits.h で定義され、オフセットは 64 ビットの整数です。ただし、for ループ内の fseek 呼び出しでエラーが発生します。ゼロ以外の値を返し、perror は「引数が無効です」と言っています。LONG_MAX (2147483647L として定義) をオフセットとして使用できないのはなぜですか?

4

2 に答える 2

1

「通常の」OS を使用している場合は、fseek64() バリアントを使用してください。

于 2012-06-27T15:26:42.183 に答える
0

エラーは Long_Max ですか?! それがあなたのオリジナルのコードなら、おそらく 2 つの fseek fns の 'file' と 'file_' の違いでしょうか?!

于 2012-06-27T15:30:29.307 に答える