プロが教える店舗&オフィスのセキュリティ対策術

教えててください。

OSは、Turbo Linuxです。
現在、大容量のファイルを操作するのに、標準関数で行おうと思っています。
seek関数を使用する場合、先頭からの位置を指定しようとするとint型の位置(符号付4バイト)になるので、容量とすると、1.9GBが限界になると思います。
しかし、扱いたいファイルの容量は、もっと大容量(200GB以上)になるので、「シークできないのでは?」と思いました。

大容量のファイルを扱う方法は、標準関数以外に何かあるのでしょうか?それとも、駆使して操作するのでしょうか?

A 回答 (2件)

fseek関数を使用した場合、seek位置はlong int型で指定しますが、64ビットモードの場合、long intが8バイトの整数となります。

従って、200G以上のサイズが扱えるはずです。
64ビットモードでfseekを使用する条件として
1.64ビットモードでコンパイルできるgccであること。(最近のgccはできるはずです。64ビット指定のオプションは調べてませんので、判りません)
2.カーネルが64ビットモードに対応していること
(これも、対応しているLINUXがあるはずですが、詳細について調べたことはないので自信なし)
が必要ですが、最近のLINUXであれば問題ないと思います。(自信なし)
    • good
    • 0

fsetpos()とfgetpos()という標準関数があります。

(stdio.h内)
fseek()、ftell()に概念的には同じですが、
ファイルの位置を表すのに、
long intの値ではなくてfpos_tという型を使っています。
使い方は別の資料で調べてください。

これを使えばなんとかなる可能性があります。
ヘッダファイルの中のfpos_tの型を調べて、
longより大きい型(新しくできたlong long intなど)か、
構造体だったら、1.9GB以上に対応しているかもしれません。
ただ、できない可能性もあります。
Linuxの実装については詳しくないので、できなかったらすみません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!