[samba-jp:20328] Re: ファイル生成時刻の扱いについて

KAWASUMI Junji touchan @ papa-net.bpl.jp
2008年 8月 12日 (火) 21:39:38 JST


川澄です。

> > ちょっと調べた限りでは、ファイルシステムが birthtime に
> > 未対応の場合に st_birthtime の値がどうなるかが BSD に依って
> > 異なるようですね。:-(
> 
>  でも、「未対応」を示す数値は birthtime 実装環境では現れ得
> ない数値でないと、区別がつかなくなるんじゃないかと思うんです
> がどうでしょう?
そうですね、単純に 0より大きかったら採用という風に思っていまし
たが、浅かったです。
でもそれなら既存コードで、
        ret = MIN(st->st_ctime, st->st_mtime);
        ret1 = MIN(ret, st->st_atime);
 
        if(ret1 != (time_t)0) {  <---- ここで 0以外って所に
                return ret1;           飛びついちゃいました。
        }

UFSを使用しつつ、stat(2)したら 0が帰ってくると思い込んでいた
自分がはずかしいです。。。

でもソースで確かめたわけでは無いですが、FreeBSD上で UFS1で作っ
たファイルに対してbirthtimeがどうなるか実行してみたところ、
エポック時間 1970/1/1 09:00:00 が返却されてきました。
なので、何となく 0でいいんじゃないかと思いました。

> > st_birthtimensec もあるかどうか調べて、両方 0 か両方 -1 なら
> > 無視するのがいいのかなぁ。
> 
>  10^(-9) の確率で nano second 値って 0 になるんじゃないかと
> 思うんですが、UFS2 や FFS2 の実装のどこかにそれを回避する仕
> 組みって用意されています?
個人的には、st_birthtimensecまで必要と思いませんが如何でしょう
か。
所詮 Windows側がどこまでの粒度を欲しているかですよね。
元のコードが
        ret = MIN(st->st_ctime, st->st_mtime);
        ret1 = MIN(ret, st->st_atime);
 
        if(ret1 != (time_t)0) {
となっており secの単位までしか相手にしていない以上不要では無い
でしょうか?
如何でしょうか。

ごめんなさいまだ仕事中でここまでしか見切れてません。
中途半端ですみませんが以上です。

-- 
--  川澄 淳治
--  KAWASUMI Junji <touchan @ papa-net.bpl.jp>
--  愛知県知多郡在住 (JR武豊線使用)
--   〜 みんなで幸せになろうよ。。。〜
--



samba-jp メーリングリストの案内