Project

General

Profile

Actions

Bug #6603

closed

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

Added by skoba (Shinji KOBAYASHI) almost 12 years ago. Updated almost 12 years ago.

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

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) almost 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) almost 12 years ago

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

Actions

Also available in: Atom PDF

Like0
Like0Like0