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

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



潮田です。
# リプライは ML へのみで結構です。

Hironao Komatsu <s1100089@u-aizu.ac.jp> wrote:
> うちの環境はx86のLinuxですが、sys/types.hによると
そういう環境でのお話なわけですね。
(相手が linux ですので、まだ範囲が広いとは思います)

> off_tは32bitのようです。何かのマクロを使うと
>  typedef off64_t off_t;
> となり、64bitになるようです。この辺はもう少し調べてみます。
手元にあるそんな環境だと Vine Linux 2.6r1 が見つかったので
試してみました。
2G 超のファイルがファイラーの画面に出てこないですね。
USELLSEEK は linux では定義済みだけれど、それだけでは足りない
のでしょう。
__USE_FILE_OFFSET64 やら __USE_LARGEFILE64 やら怪しいマクロが
互いに影響するようですね。


> Shoichi.Shiota> $ Makefile.tmp の CFLAGS に -D_LARGE_FILES を追加
> 今手元にあるSolaris機でこれを試した結果では、
>  (gdb) print sizeof(off_t)
>  $1 = 4
>  (gdb) print sizeof(off64_t)
>  $2 = 8
> でした。環境によってはうまくいかないみたいです。
で、 Vine(Linux) はあきらめて、 Solaris で試しました。
sunrise 5.7 で cc を使用しました。

2G 超のファイルがファイラーの画面に出てこないのは同じですね。

>> $ Makefile.tmp の CFLAGS に -D_LARGE_FILES を追加
を
$ Makefile.tmp の CFLAGS に -D_FILE_OFFSET_BITS=64 を追加
に変更すると、

1.いままで出ていたファイルのサイズは正常に表示。
2.2GB 超のファイルのサイズが ? と表示される。
(右よせで前がブランクの ?)

となりました。

>> parse.c の ascnumeric() で第2引数 n の型を
>> long -> long long
>> へ変更。

を実行。
落ちるようになりました。
AIX とは異なり、プロトタイプを正しくする必要があるようです。
$ grep ascnumeric *.[ch] | grep extern
でひっかかるものをすべて同様に変更。
で、終わりでした。


> 
> Shoichi.Shiota> 999999999 の表示は、わざとそうされているようなので
> Shoichi.Shiota> これで終了。
> 表示可能桁を超えるとこうなります。昔は違う表現だったように
> 記憶していますが…
確かになんか違和感がありますね。
ではどういう表示にするかと問われると困りますが。