[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00199] Re: 巨大ファイルの扱い
- Subject: [FDclone-users:00199] Re: 巨大ファイルの扱い
- From: SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>
- Date: Wed, 28 May 2003 17:53:49 +0900
潮田です。
> しらいです。
>
> 情報提供どうもありがとうございます。しかし、version 依存問
> 題が完全にはクリアされませんね。各々の version を自動判別す
> る術が判って初めて「make 一発」が実現出来るので。
> 一応こちらでも調べてみたのですが、AIX: 4 以降、HP-UX: 11
> 以降、Solaris: 5.6 以降、という状況のようです。この分け目と
> なる version の自動判別が出来ればいいんですけどね。
とりあえず AIX だと _AIX43 が定義されているかで、判定できかと思
います。
今現在 _AIX32,_AIX41,_AIX43,_AIX50,_AIX51,_AIX52 が存在しており、
コンパイルしている OS より前の version の定義をすべての並べて
使用します。
(うちは 5.1 なので -D_AIX32 ... -D_AIX51 のように使用)
ただ、 man stat64 に
> Note: The stat64, lstat64, and fstat64 subroutines apply
> to AIX 4.2 and later releases.
と記載されているのですが、そのくぎりの _AIX42 というものは
ないようです。
AIX 4.2 上では AIX 4.1 とまったく同じ定義を使用することは、
コンパイラーの設定ファイルで分かるので、この version を
使用しているユーザーに泣いてもらえれば・・・
> まとめるとこんな感じでしょうか。
> 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"
HP-UX だけ -O が無いのですが、これはこの OS では -O ですら
危ないのでしょうか。
あと、 HP-UX や Solaris も2種類の define は排他ってことは
無いでしょうか。
(どちらも何の根拠も無く、たんなる疑問です)
> 心配なのは、これらの手段は 32bit OS 用に用意されているとい
> う点ですね。上記のように machine.h を書換えた場合、64bits OS
> 下で compile して支障がないかという懸念があります。
> Linux 以外は 32bit 環境しか無いんでしたっけ?
多分ご存知で反語的に使用されているとは思いますが、 Linux 以外の
3種の OS すべてに 64 bit 環境もあります。
AIX だと kernel の差し替えだけで 32 -> 64 では再起動さえ必須で
無いらしいです。
(64 -> 32 は必須だそうですが)
自分たちで書いたソースが 32bit 環境に依存したつくりになって
いるので、 64bit 環境にしたことはありません。
(CPU が Power4 なので 32bit ではちっとも速くないです)
この確認のために管理者にはじめて確認したのですが、うちの
HP-UX や Solaris は 64bit 環境のはずだそうです。
確認方法(コマンド)をしらないが、最低限 install されている
商用のソフト(CA 製の監視ソフト)は 64bit モジュールで動いている
とのこと。
FD(にかぎりませんが) が 32bit で作成されているのは、単に
コンパイルラーが default で 32bit モジュールを作成しているから
みたいです。
> もし Linux(Alpha) 環境があるんでしたら、上記の対処が Alpha
> 版に対して特に支障をもたらさないかどうか、検証してみて頂けな
> いでしょうか。
2G over のサイズを持つファイルの名前が表示されて、
サイズ順でソート可能なことは確認しました。
簡単に
--- ここから ---
#include <stdio.h>
#include <sys/types.h>
int main(int argc, char *argv[])
{
printf("int[%d], long[%d], void *[%d], size_t[%d],"
"off_t[%d]\n", sizeof(int), sizeof(long),
sizeof(void *), sizeof(size_t), sizeof(off_t));
return 0;
}
--- ここまで ---
のソースで "-O -D_FILE_OFFSET_BITS=64" のある or なしの結果を
みてみましたが変化ありませんでした。
# int[4], long[8], void *[8], size_t[8], off_t[8] となります。
# 便乗 64bit 環境では
# 実害はないと思いますが、custom.c で struct _envtable の def を
# int へキャストしているところはワーニングになります。
# char * > int ですので。
環境は、 Kondara MNU/Linux release 1.2 です。
# 2.0 からは対象外となった古い alpha です。
# 次は suse あたりかな。
# もしかして samba-2.2.8a-ja-1.0 の方でも同じようなことを...