LoginSignup
0
0

More than 5 years have passed since last update.

Time::HiResのutimeに1秒以下の設定を求めるのは間違っているだろうか外伝

Posted at

第1話 utimeとtouch

utimeそれはファイルのatimeとmtimeを設定する関数である。
こんな使い方をする。

$ touch a.txt
$ perl -E 'say utime(1,1,"a.txt")'
$ stat a.txt
Access: 1970-01-01 09:00:01.000000000 +0900
Modify: 1970-01-01 09:00:01.000000000 +0900

なお、これはtouchコマンドでも可能である

$ touch -t 197001010900.02 a.txt
Access: 1970-01-01 09:00:02.000000000 +0900
Modify: 1970-01-01 09:00:02.000000000 +0900

2話 高精度とTime::HiRes

さて、近年のファイルシステムでは1秒以下の日付分解能を持っているので
ミリ秒単位での設定もしたいのだが、これは上記2つでは対応していないのでできない。
そこで現る高精度の時刻を扱うTime::HiResモジュール様のご登場。

Time :: HiRes - 高解像度アラーム、スリープ、gettimeofday、インターバルタイマー - metacpan.org

3話 エラーとバージョン

$ perl -MTime::HiRes -E 'say Time::HiRes::utime(3.33,3.33, "a.txt")'
utime is not a valid Time::HiRes macro at -e line 1.
$ rpm -q perl-Time-HiRes
perl-Time-HiRes-1.9725-3.el7.x86_64

どういうこと\(^o^)/

どうやらTime::HiResにtimeが実装されたのは1.9733(2016-04-23)~1.9739(2016-06-28)で、CentOS7系のは1.9725(2012-02-01)なので未対応ということだ。

4話 buildとinstall

こうなったら最新のに差し替えてみる。

# yum install epel
# yum install cpanspec
# cpanspec --packager ymko Time::HiRes
# yum-builddep perl-Time-HiRes.spec
# yum install gcc
$ mkdir -p rpmbuild/SOURCES
$ cp Time-HiRes-1.9742.tar.gz rpmbuild/SOURCES/
$ vi perl-Time-HiRes.spec
Epoch:          4
$ rpmbuild -ba --define "dist .el7" perl-Time-HiRes.spec
# rpm -Uvh /home/ymko/rpmbuild/RPMS/x86_64/perl-Time-HiRes-1.9742-1.el7.x86_64.rpm

5話 勝利と参考文献

3.33秒に設定する。

$ perl -MTime::HiRes -E 'say Time::HiRes::utime(3.33,3.33, "a.txt")'
$ stat a.txt
Access: 1970-01-01 00:00:03.330000000 +0000
Modify: 1970-01-01 00:00:03.330000000 +0000

Perlモジュールtarボールからspecファイルを生成するコマンドcpanspec - Qiita

カスタムRPMや独自yumリポジトリではじめるソフトウェア管理術 - さくらのナレッジ

 「Epoch」はパッケージの新旧を比較するために使われる数値で、指定されていない場合は「0」と見なされる。rpmコマンドやyumコマンドでパッケージをアップデートする場合、通常はVersionやReleaseの値の大小を比較してバージョンの新旧をチェックするのだが、Epochの値が指定されていた場合は、この値の大小でバージョンの新旧がチェックされる。つまり、VersionやReleaseの値が古い(数値が小さい)場合でも、Epochの値が大きければそちらのパッケージがより新しいものと認識される。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0