イマドキのsleepは小数点の指定が出来ていた件
こんにちは、先々週の次男に続き、先週は長男が中耳炎になり、いつも以上に働いていません。長男が楽しみにしていた遠足を控えた週の中頃、熱を出すものの、これは早退して、ゴロゴロ寝て遠足の当日は楽しく参加できた様子でした。 が、その後、中耳炎になり、朝から親子共々かかりつけの耳鼻科に行って、休んでいました。@kjunichiです。
背景
先日、「コマンドラインで1秒より短い時間を指定してスリープさせるには」の記事の投稿に飽き足らず、Qiitaにも同様の話題を投稿したところ、イマドキのsleepコマンドは小数点の指定が出来るとの教えていただいた。
英文のマニュアルの該当箇所まで教えていただいたので、折角の機会なので自分はコードレベルでどうなっているのか確認してみた。
NetBSDのsleepコマンドのソース
IIviというMacintoshがIntelやPowerPCより前のMotorolaの石を使っていた時代にお世話になったBSDのNetBSDはどうなっているのかと、調べてみた。
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にソースがあった。
(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コマンドは、小数点に対応していたことが分かった。OSXはBSDをベースとは知っていたが、今回の一件で、そのベースがFreeBSDであることが分かった
関連記事