perl には syscall() が用意されており、使ったことがありましたので、Ruby にもあるかな?とライブラリリファレンスを参照してみると、案の定ありました。
clock_gettime(CLOCK_MONOTONIC) を呼び出すサンプルです。
#!/usr/bin/env ruby NR_clock_gettime = 228 # defined in asm-x86_64/unistd.h CLOCK_MONOTONIC = 1 # CLOCK_MONOTONIC defined in linux/time.h ts = ' ' * 16 syscall(NR_clock_gettime, CLOCK_MONOTONIC, ts) (tv_sec, tv_nsec) = ts.unpack("l!l!") printf "%d.%09d\n", tv_sec, tv_nsec次が実行結果です。
# ./monotonic.rb ; cat /proc/uptime 134772.112499324 134772.11 134476.00なお、一般に、システムコール番号はアーキテクチャ毎に異なります。上記の 228 は、x86_64 の場合です。
■関連記事
経過時間の計測方法
0 件のコメント:
コメントを投稿