In article <1012212090.162851.19949.nullmailer / ev.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> 数値を見るかぎりは major=rdev>>8; minor=rdev&0xff のようです
> が。これってどこかで定義されているんですか?

はい。major と minor というマクロが定義されています。

ちなみに、FreeBSD ではもちっと複雑です。

sys/types.h:
#define major(x)        ((int)(((u_int)(x) >> 8)&0xff)) /* major number */
#define minor(x)        ((int)((x)&0xffff00ff))         /* minor number */
#define makedev(x,y)    ((dev_t)(((x) << 8) | (y)))     /* create dev_t */

歴史的には... (さっそく手元に確保した) Version 7 の sys/types.h で

#define major(x)        (int)(((unsigned)x>>8))
#define minor(x)        (int)(x&0377)
#define makedev(x,y)    (dev_t)((x)<<8|(y))

と定義されてるので、sys/types.h を include してれば
major/minor/makedev は存在すると見て間違いないと思います。

なお、File::Stat#major, File::Stat#minor という API は適切だと思います。
(mknod に渡す以外にも ls -l の emulate に使えますし。)

makedev (や、File::Stat に依存しない minor, major) をどこにおくべきか
はよくわかりません。まぁ、dev_t を使うことは滅多にないので、保留ですか
ね。File.mknod もないし。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)