From: "naruse (Yui NARUSE)" Date: 2012-06-19T10:08:46+09:00 Subject: [ruby-dev:45764] [ruby-trunk - Bug #6603][Third Party's Issue] FileUtils::touchで更新時刻,アクセス時刻がミリ秒単位で記録されない(FreeBSD/amd64) Issue #6603 has been updated by naruse (Yui NARUSE). 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; } ---------------------------------------- Bug #6603: FileUtils::touchで更新時刻,アクセス時刻がミリ秒単位で記録されない(FreeBSD/amd64) https://bugs.ruby-lang.org/issues/6603#change-27293 Author: skoba (Shinji KOBAYASHI) 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] ファイルの作成時刻・更新時刻がミリ秒単位で反映されるかどうかは処理系に依存しているとのことですが, 下記のように,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) -- http://bugs.ruby-lang.org/