Bug #6603
closedFileUtils::touchで更新時刻,アクセス時刻がミリ秒単位で記録されない(FreeBSD/amd64)
Description
ファイルの作成時刻・更新時刻がミリ秒単位で反映されるかどうかは処理系に依存しているとのことですが,
下記のように,touchを利用してファイルを作成した場合はミリ秒単位で記録されるますが,さらにtouchを
利用して更新時刻を記録しようとすると小数点以下が記録されないようです。
irbでの例です。
irb(main):001:0> require 'fileutils'
=> true
irb(main):002:0> include FileUtils
=> Object
irb(main):003:0> touch 'temp'
=> ["temp"]
irb(main):004:0> File.mtime('temp').to_f
=> 1340024581.3077028
irb(main):005:0> touch 'temp'
=> ["temp"]
irb(main):006:0> File.mtime('temp').to_f
=> 1340024608.0
irb(main):007:0> touch 'temp'
=> ["temp"]
irb(main):008:0> File.mtime('temp').to_f
=> 1340024617.0
mtimeオプションを指定するとミリ秒単位で記録されます。
irb(main):008:0> touch 'temp', mtime: Time.new
=> ["temp"]
irb(main):009:0> File.mtime('temp').to_f
=> 1340030522.9299169
File.atimeも同様にmtimeオプション無しだとミリ秒単位は
記録されません。
fileutils.rbのtouchメソッドの中の下記行で,
時刻の更新をしているようなのですが,tがnilで
ある場合の挙動に問題があるようにも思います。
File.utime(t, t, path)
Updated by naruse (Yui NARUSE) over 12 years ago
- Status changed from Open to Third Party's Issue
Ruby の File.utime(nil, nil, path) は utimes(path, NULL) を呼んでいるだけなので、
FreeBSD の utimes(2) の問題です。
以下を実行すると、現在秒までしか設定されないことが確認できます。
send-pr してください。
#include <sys/time.h>
int main(void) {
utimes("t.log", NULL);
return 0;
}
Updated by skoba (Shinji KOBAYASHI) over 12 years ago
ありがとうございます。
send-prしてみます。