non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

イマドキのsleepは小数点の指定が出来ていた件

こんにちは、先々週の次男に続き、先週は長男が中耳炎になり、いつも以上に働いていません。長男が楽しみにしていた遠足を控えた週の中頃、熱を出すものの、これは早退して、ゴロゴロ寝て遠足の当日は楽しく参加できた様子でした。 が、その後、中耳炎になり、朝から親子共々かかりつけの耳鼻科に行って、休んでいました。kjunichiです。

 

背景

先日、「コマンドラインで1秒より短い時間を指定してスリープさせるには」の記事の投稿に飽き足らず、Qiitaにも同様の話題を投稿したところ、イマドキのsleepコマンドは小数点の指定が出来るとの教えていただいた。

英文のマニュアルの該当箇所まで教えていただいたので、折角の機会なので自分はコードレベルでどうなっているのか確認してみた。

NetBSDのsleepコマンドのソース

IIviというMacintoshIntelPowerPCより前のMotorolaの石を使っていた時代にお世話になったBSDNetBSDはどうなっているのかと、調べてみた。

src/bin/sleep/sleep.c - view - 1.24

while ((rv = nanosleep( time, &ntime)) != 0) {

nanosleepを呼んでいた。

OSX Yosemiteのsleepコマンドのソース

OSXもてっきり同じ系統のソースを使っているのだろうと勝手に思い、バージョンの確認を以下のコマンドで行った。

strings `which sleep`|more
$FreeBSD: src/bin/sleep/sleep.c,v 1.20 2005/08/07 09:11:38 stefanf Exp $
usage: sleep seconds
@(#)PROGRAM:sleep PROJECT:shell_cmds-179

OSXのsleepコマンドはFreeBSD製だったことが分かった。

OSXになってからオープンソース対応ということで、秘密主義のAppleもコードを公開しており、

以下のURLにソースがあった。

sleep.c

    (void)nanosleep(&time_to_sleep, (struct timespec *)NULL);

じゃぁ、おれの知ってる秒単位のスリープだったのはいつごろの話なんだ

CVS log for src/bin/sleep/sleep.c

__RCSID("$NetBSD: sleep.c,v 1.9 1997/07/20 21:28:27 christos Exp $");

(void)sleep(secs);

おれが大学院生になった夏に小数点に対応してたのか!この時期、友人たちからPCパーツをめぐんでもらったりで、Mac(※)からDOS/Vに移って、Linux使ってたころで、BSDとは疎遠になっていたんだ。

※:当時のMacは現代のBSDベースのOSXではありません。

まとめ

今回の一件で、結構古くからsleepコマンドは、小数点に対応していたことが分かった。OSXBSDをベースとは知っていたが、今回の一件で、そのベースがFreeBSDであることが分かった

関連記事

9年前の記事

3年前の記事