[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00344] Re: FDclone でファイルサイズが 0 と表示される
- Subject: [FDclone-users:00344] Re: FDclone でファイルサイズが 0 と表示される
- From: SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>
- Date: Thu, 02 Dec 2004 11:26:46 +0900
潮田です。
> んー、ファイルサイズだけですか。ページ数やマーク数の表示は
> 大丈夫なんですね?だとすると size_t 幅の変数を扱いきれなくて
> 桁溢れを起こしているんですかね。
2 行目の Page: や Mark: の数字は、大丈夫そうです。
> サイズが 4GB 以上のファイルだとファイルサイズがようやく一
> 桁の数値になるようなら 32bit 幅で切られた結果でしょうね。
試しに、
$ dd if=/dev/zero of=4g bs=1m count=4097
$ ls -l 4g
-rw-r--r-- 1 shiota staff 4296015872 Dec 02 10:13 4g
と 4GB よりちょっと大きいファイルを作って fd で表示させると、
4g -1 04-12-02 10:13
となりました。
(初めて 0 以外の表示には違いないですが)
> この最後の引数を (long) でキャストしてみるとどうなります?
(long) にすると、全てのファイルサイズが -1 と表示されました。
> 解決策その 1:
> machine.h の AIX の項目に「#define HAVELONGLONG」を追加。
これでは、正しいファイルサイズが表示されました。
> 解決策その 2:
こちらでは、上で書いているのと同様、全て -1 と表示されました。
引用順を変えています。
> ま、無駄なだけで弊害は無いと思うので、「その 2」で対応出来
> るようなら、環境依存のありそうな「その 1」はやめて「その 2」
> で対処しましょうか。
上記の様にうまくいきませんでした。
参考になりますかどうか、
printf("%d %d %d %d\n",
sizeof(long),
sizeof(long long),
sizeof(size_t),
sizeof(off_t));
を、-D_LARGE_FILES -U_LARGE_FILE_API のあるなしで実行させて
あり:4 8 4 8
なし:4 8 4 4
になる環境です。
> →long long 非対応の AIX 環境ってないのか?
やはり、古い version では存在しているのではないかと。
(周りに存在する version の幅が狭いので、未確認ですが)
また AIX は、この対応がかなり変だと思います。
long long 型自体は知っていても、ならば当然実装されているであろう
関数がなかったりします。
今年の春、 lftp という soft が version を 2 から 3 へ上がった
のですが、 atoll() をリリース版のソースで使用されていて
引っかかりました。
(途中何度か公開された snapshot では使用していなかったので)
AIX 5.2 (以降?)には atoll() は実装されているのですが、 4.3.3 や
5.1 にはありません。
strtoll() は実装されているので、 wrapper を書いて逃げました。
ただ、そんな環境は少なくなかったのか lftp も 3.0.2 で atoll() は
削除しましたが。