[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00195] Re: 巨大ファイルの扱い
- Subject: [FDclone-users:00195] Re: 巨大ファイルの扱い
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Tue, 27 May 2003 01:05:01 +0900
しらいです。
In Message-Id <03May26.183457jst.119063@inetgw.lightwell.co.jp>
SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>さんwrites:
> 潮田です@現実逃避中
> -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
>
> をつける。
_LARGEFILE_SOURCE の方は関係ない筈です。_FILE_OFFSET_BITS
を指定することで off_t が 64bits になり、stat() が staf64()
に置き換わります。
POSIX には規定されていませんが、最初から stat64() を用いる
方が汎用性があるかも知れません。この場合、_LARGEFILE64_SOURCE
を指定してやる必要があります。
どの道 ascnumeric() の引数は long -> off_t(off64_t) にしな
くれはなりませんが。
Linux だけを対象にするならば _FILE_OFFSET_BITS の方で構わ
ないのですが、他の OS も救済することを考えて、USESTAT64 とい
う識別子で stat64() を使えるようにしておきますね。
ただ、どの OS のどの version でこれが使えるのかが判ってい
ませんので、#define しておくのはやめておきます。HP-UX に実装
されていることは判っているのですが、古い version には存在し
ないので version 判別が厄介そうです。
> > $ Makefile.tmp の CFLAGS に -D_LARGE_FILES を追加
> と同様に変更すれば OK です。
config.h に #define EXTENDCCOPT "-O -D_FILE_OFFSET_BITS=64"
を書いておけば Makefile.tmp を書換えてくれる筈です。
> machine.h の USELLSEEK はあっても無くても、ここまでは
> かわりません。
これは _LARGEFILE_SOURCE や _LARGEFILE64_SOURCE を指定しな
くても 64bits 幅の offset 値を用いて lseek() が可能な system
call のことで、DOS drive 機能を用いる時に device file を対象
として用いています。
詳細は man llseek で確認して貰うとして、file の 2GB 超問題
とは独立した話ですので、この指定は消さないでおいて下さい。消
してしまうと 2GB 超の MS-DOS partition が見えなくなります。
> # linux の詳しい方、後お願いします。
> # filesystem が何々でないととか kernel がいくつ以降とか。
> # あげている URL も読んだわけではないので・・・
kernel は 2.0 以降で対応しているようですが、標準の ext2fs
自体が 2GB 超の file を作れないので、ext3fs や ReiserFS を使
うことで初めて意味を持つことになるでしょう。
次世代 kernel では ext3 か何か、次世代 file system が標準
になるということなので、そうなったら stat64() くらいは標準で
有効になっているんじゃないでしょうか。
しらい たかし