68user's page 掲示板

Prev< No. 3421> Next  [最新発言に戻る] [過去ログ一覧]
No. 3421 # 68user 2003/11/23 (日) 05:12:12
>>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) である。

Prev< No. 3421> Next  [最新発言に戻る] [過去ログ一覧]