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

[FDclone-users:00344] Re: FDclone でファイルサイズが 0 と表示される



潮田です。

>  んー、ファイルサイズだけですか。ページ数やマーク数の表示は
> 大丈夫なんですね?だとすると 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() は
削除しましたが。