Bug #6603

FileUtils::touchで更新時刻,アクセス時刻がミリ秒単位で記録されない(FreeBSD/amd64)

Added by Shinji KOBAYASHI almost 2 years ago. Updated almost 2 years ago.

[ruby-dev:45760]
Status:Third Party's Issue
Priority:Normal
Assignee:-
Category:-
Target version:1.9.3
ruby -v:ruby 1.9.3p194 (2012-04-20 revision 35410) [amd64-freebsd9] Backport:

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').tof
=> 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)

History

#1 Updated by Yui NARUSE almost 2 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
int main(void) {
utimes("t.log", NULL);
return 0;
}

#2 Updated by Shinji KOBAYASHI almost 2 years ago

ありがとうございます。
send-prしてみます。

Also available in: Atom PDF