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

KAWASUMI Junji touchan @ papa-net.bpl.jp
2008年 8月 21日 (木) 00:26:17 JST


かわすみです  こんばんわです。

先ほどは、会社にて斜め読みでぱっと返信してしまいました。
ご無礼しました。

さて、

On Wed, 20 Aug 2008 23:47:31 +0900 (JST)
Takahiro Kambe <taca @ back-street.net> wrote:

> In message <48AC10C4.4F398B29 @ asahi-net.or.jp>
> 	on Wed, 20 Aug 2008 21:40:36 +0900,
> 	Tadamasa Teranishi <yw3t-trns @ asahi-net.or.jp> wrote:
> > # もちろん robocopy 等でコピーすれば、「作成日時」「更新日時」
> > # 「アクセス日時」が同じファイルを複製することもできますが...。
> これで思い出して、調べ直して改めてわかりました。この辺りを明示的に設定
> するには utimes(2), lutimes(2),futimes(2) を使います。(lutimes(2)と
> futimes(2)はBSD系のみかもしれません。)
> 
> utimes(2)で渡せる日時情報は、第二引数でtimeval構造体の配列で2つの日時
> 情報だけです。作成日時は設定できないと思って最初のメールは書いていまし
> たが、実はそうではありませんでした。
> 
> o 第二引数が NULL: アクセスと更新の両方の日時が現在日時に設定
> 
> o 第二引数が 非NULL: 2つのメンバの配列が渡されたと仮定
> 
> 	* 最初がアクセス、2つ目が更新の日時情報として設定
> 	* 2つめの日時情報が、現在の作成日時よりも古かったら、その値に
> 設定
> 
> と、いう風になっているとのことです。このため、一通り設定したい場合は、
> 
> 1. 作成日時を設定
> 2. アクセスと更新日時を設定
> 
> と2回呼び出さないといけないということです。(理想的には、3つ一度に設定
> できる新しいシステムコールがあった方が良いとのことですが。)
> 
> 以上、NetBSDの場合で他のオペレーティング・システムまでは確認していませ
> ん。
> 
その辺の事情は、FreeBSDでも同じ状況です。
要するにシステムコールを2度呼びが必要です。
UFSv2が出たときにどうやって自分の好きな値を設定するんだろうと
思って調べたら、「そう来たか!!」って感じでグッときた覚えがあ
ります。

でもSAMBA的には、コピーにしても移動にしても Windows側は、一つづ
つ inodeを作成(creat(2))しているのでは無いでしょうか。
結局 Explorerが、読んじゃ書いてを繰り返すのみだと思っていますが、
どうなんでしょう???
特にローカルNTFSではなく、Windowsの共有ドライブのデータについては、
robocopy等のツールでも作成時間は、コピーした時間になる様な気がし
ます。
(自宅にWindows環境が2つも無いのでちょっと実験できません)

現状のSAMBAの生ソースが、ファイル生成時間をCTIME, MTIME, ATIMEの
内もっとも小さなものか、epochの値を返している以上、システムコール
を2度呼びまでして作成時間をUPDATEしているとは思えませんね〜。

結局ファイル生成時間をアトリビュートとして持っているFSが少数派な
のでメインツリーに入ることは、ず〜っと後なのか全くあり得ないかと
いう落ちになりそうな予感もしますね。

以上です

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



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