[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 メーリングリストの案内