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

> |なお、File::Stat#major, File::Stat#minor という API は適切だと思います。
> |(mknod に渡す以外にも ls -l の emulate に使えますし。)
> 
> これは追加してみようと思います。そういえばdev_tはlong longな
> んですね。現在はlongで代用していますが、問題が起きるケースも
> あるでしょうか。

神戸さんの指摘の通りシステム依存ではあります。そして、Linux の dev_t
が 64bit だというのは確かにそうみたいですが、major/minor の定義により
8+8bitしか扱えないようになっているようです。

また、
FreeBSD 4.4 は 8+24 (16+8+8), 
NetBSD 1.5.1 は 12+20 (12+12+8),
OpenBSD 2.9 は 8+8,
AIX 4.3 は 16+16,
Digital UNIX V4 は 12+20,
HP-UX B.10.20 は 8+24,
SunOS 5.8 は 7+8,
SunOS 4.1.4 は 8+8,
というように major, minor 単独で 32bit を越えるものは調べた限りでは見
つかりませんでした。

つーわけで、major(st_rdev) や minor(st_rdev) を long に代入することで
問題がおきることはないと思います。

なお、どのシステムでも sys/types.h と sys/sysmacros.h のどちらか(ない
しは両方)で定義が見つかりました。

# みんな 8+8 かと思ってたんですが、こんなにいろいろあるんですねぇ。
-- 
[田中 哲][たなか あきら][Tanaka Akira]
「ふえろ! わかめちゃん作戦です$(C⊇」(Little Worker, 桂遊生丸)