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

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



 しらいです。

In Message-Id <03May27.095141jst.119061@inetgw.lightwell.co.jp>
        SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>さんwrites:
> 潮田です。

> AIX)
>     stat64() は実装されています。
>     man によると AIX 4.2 以降にあるようです。
>     使用するには _LARGE_FILE_API の define が必要で、
>     _LARGE_FILES が undef 。
>     stat() を置換して 64bit 対応させるには、これを逆にする。
> 
> HP-UX)
>     11.00 の man から
>       POSIX標準の一部ではなく、将来は削除される可能性があります。 
>       _LARGEFILE64_SOURCE によって定義され使用可能になります。
>       _FILE_OFFSET_BITS が64の時にコンパイルされると32-bit
>       applicationで大きいファイルを作成・アクセスできます。
> 
> solaris)
>     5.7 では man に記述がみつかりませんが、ヘッダーをみる限り
>     HP-UX と同じ define の組み合わせに見えます。

 情報提供どうもありがとうございます。しかし、version 依存問
題が完全にはクリアされませんね。各々の version を自動判別す
る術が判って初めて「make 一発」が実現出来るので。
 一応こちらでも調べてみたのですが、AIX: 4 以降、HP-UX: 11
以降、Solaris: 5.6 以降、という状況のようです。この分け目と
なる version の自動判別が出来ればいいんですけどね。

 で、Linux を含めてこれら 4 OS の状況を眺めてみると、stat64()
の仕様可能な環境では同時に stat() の拡張手段も用意してあって、
後者では従来の source との互換性も保たれる訳ですよね。
 それならば、明示的に stat64() を使うことはかえって互換性を
失わせてしまうことになるので、-D のみで済む後者の手段で実装
すべきなのかも知れません。

 まとめるとこんな感じでしょうか。
Linux)
#define EXTENDCCOPT	"-O -D_FILE_OFFSET_BITS=64"

AIX)
#define EXTENDCCOPT	"-O -D_LARGE_FILES -U_LARGE_FILE_API"

HP-UX)
#define EXTENDCCOPT	"-D_FILE_OFFSET_BITS=64"

Solaris)
#define EXTENDCCOPT	"-O -D_FILE_OFFSET_BITS=64"

 これらの記述をそれぞれ machine.h の該当箇所に置くことによ
り、本体の source には一切手をつけることなく 64bits off_t が
使われるようになるのではないでしょうか。
 古い version で 64bits off_t に対応していない場合、stat64()
を使うと compile error になりますが、この方法であれば、単に
知らない識別子が定義されているだけで無視してくれると思います。

 心配なのは、これらの手段は 32bit OS 用に用意されているとい
う点ですね。上記のように machine.h を書換えた場合、64bits OS
下で compile して支障がないかという懸念があります。
 Linux 以外は 32bit 環境しか無いんでしたっけ?


> 私は、 linux をはじめて install したのも、使用したのも
> alpha マシンだったため、この辺りの感覚が狂っているようです。
> (x86 系の linux が周りにきたのはつい最近)
> ext2 ですが 2G 超のファイルが普通に作れてしまうので。

 もし Linux(Alpha) 環境があるんでしたら、上記の対処が Alpha
版に対して特に支障をもたらさないかどうか、検証してみて頂けな
いでしょうか。
 ascnumeric() の方の問題は単に表示だけの問題ですので、素の
FDclone 2.03b に machine.h の変更を施すだけでも検証には十分
だと思います。

# 折角 USESTAT64 用の実装をしたところなのに...。

                                               しらい たかし