>>3420 yoshi > unameコマンドについて質問なのですが、 > このコマンドの語源は何なのでしょうか? FreeBSD 5.1-RELEASE の uname(1) には http://www.freebsd.org/cgi/man.cgi?query=uname&manpath=FreeBSD+5.1-RELEASE&format=html HISTORY The uname command appeared in PWB UNIX. とあります。 PWB (Programmers Work Bench) UNIX の位置付けは http://www.levenez.com/unix/history.html をどうぞ。簡単に言うと V6 UNIX から分岐し、SVR3 に統合された古代の UNIX です。 # ちなみに他の OS のマニュアルにはたいしたことは書いてありませんでした。 で、古代の UNIX と言えば、SCO が公開した V6 や V7 のソース http://minnie.tuhs.org/TUHS/archive_sites.html をあたってみるべきです。そこをつらつらと眺めると…おぉ、そのもの ずばり PWB という文字を発見。 http://www.tribug.org/pub/tuhs/PDP-11/Distributions/usdl/bostic_pwb.tar.gz 早速展開してみると、マニュアルがありました。 % find . -name uname\* ./pwb.5/pwb.2/usr/man/man1/uname.1 ./pwb.5/pwb.2/usr/man/man2/uname.2 uname.1 の中身は以下の通り。 % cat ./pwb.5/pwb.2/usr/man/man1/uname.1 .th UNAME I 5/31/77 .sh NAME uname \*- print name of current UNIX .sh SYNOPSIS .ft B uname .ft R .sh DESCRIPTION .it Uname prints the current name of UNIX on the standard output file. It is mainly useful to determine what system one is using. .sh "SEE ALSO" uname(II) PWB で拡張されたシステムコールらしきソースをみると、以下のように なっています。 ./pwb.5/pwb.2/sys/sys/os/pwbsys.c pwbsys() { extern uchar; register i; register *p; register struct buf *bp; switch(u.u_arg[0]) { case 0: /* uname */ if (copyout(&pwbname, u.u_ar0[R0], 8)) u.u_error = EFAULT; return; つまり uname(2) は pwbname を返しているだけ。その pwbname は char pwbname[9] "pwbname"; と定義されていました。 uname(2) のマニュアルには (以下、FreeBSD の nroff に喰わせた出力) uname get name of current PWB/UNIX (pwbsys = 57.; uname = 0) (pointer to name in r0) returns in the 8 byte character name of the current PWB/UNIX. The name is not null-terminated. By convention, the name is of the form pwb?date. For example, pwba0401 would indicate that this is PWB/UNIX System A and that its operating system was last modified on April 1. This function is kept in the library. un- ame(I) The error bit(c-bit) is set if can not be written. From C, a 1 return indicates an error. とありますので、リリース時は pwbname で、バージョンアップ時に pwba0401 などと書き換えてからコンパイルすることを意図したもの だったようです。 というわけで、今日のトリビア: uname の u は … UNIX の U である。 uname(2) は … 昔は uname(II) と書いていた。 補足トリビア: 当然 clri(8) は clri(VIII) である。 |