[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00195] Re: 巨大ファイルの扱い



 しらいです。

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() くらいは標準で
有効になっているんじゃないでしょうか。

                                               しらい たかし