EN JA
UNAME(2)
UNAME(2) Linux Programmer's Manual UNAME(2)

名前

uname -現在稼働中のカーネルについての名前と情報を得る

書式

#include <sys/utsname.h>
 
int uname(struct utsname * buf );

説明

uname() は buf で指される構造体にシステム情報を返す。 utsname 構造体は <sys/utsname.h> で以下のように定義されている。


struct utsname {
char sysname[]; /* OS の名前 (例: "Linux") */
char nodename[]; /* 「実装時に定義された、何らかの
ネットワーク」におけるマシン名 */
char release[]; /* オペレーションシステムのリリース番号 (例: "2.6.28") */
char version[]; /* オペレーティングシステムのバージョン */
char machine[]; /* ハードウェア識別子 */
#ifdef _GNU_SOURCE
char domainname[]; /* NIS や YP のドメイン名 */
#endif
};



struct utsname にある配列の長さは指定されていない (「注意」の節を参照)。フィールドは NULL バイト ('\0') で終端される。

返り値

成功した場合は 0 が返される。エラーの場合は-1 が返され、 errno が適切に設定される。

エラー

EFAULT
buf が有効でない。

準拠

SVr4, POSIX.1-2001. 4.3BSD には uname() コールがない。

domainname メンバー (NIS または YP ドメイン名) は GNU の拡張である。

注意

これはシステムコールであり、OS は名前・リリース・バージョンなどをたぶん分かっているだろう。さらにそれが稼働しているハードウェアも分かっているだろう。よって構造体の 4 つのフィールドには意味がある。一方、 nodename フィールドには意味がない: このフィールドは現在のマシンの (定義されていない) どこかのネットワークにおける名前を与えるが、通常マシンは複数のネットワークに属し、複数の名前を持つ。さらに、カーネルはこのような情報を知る術を持たないので、ここでの答えは前もって教えてやらなければならない。これは追加フィールドである domainname についても同様である。

このため Linux ではシステムコール sethostname(2) と setdomainname(2) が使われる。「 sethostname(2) で設定されるホスト名は、 uname() で返される構造体の nodename フィールドと同じ文字列である」と規定している標準規格はない (実際、256 バイトのホスト名と 8 バイトのノード名を許可しているシステムもある)。しかし、Linux では同じ文字列が返される。 setdomainname(2) と domainname フィールドについても同じことが成り立つ。

構造体のフィールドの長さはさまざまである。 OS やライブラリの中には、ハードコードされた 9, 33, 65, 257 などの値を使っているものもある。また SYS_NMLN, _SYS_NMLN, UTSLEN, _UTSNAME_LENGTH などを使っているシステムもある。はっきり言って、これらの定数を使うのは悪い考え方であり、 sizeof(...) を使うべきである。インターネットホスト名で使う領域を持たせるために、 257 が選ばれることが多い。

utsname の情報は、 /proc/sys/kernel/{ ostype, hostname, osrelease, version, domainname} を使ってアクセスすることもできる。

背後のカーネル・インタフェース

時間の経過とともに、 utsname 構造体のサイズが大きくなり、この影響で uname() には 3つのバージョンが存在する: sys_olduname() (スロットは __NR_oldolduname)、 sys_uname() (スロットは __NR_olduname)、 sys_newuname() (スロットは __NR_uname)。 sys_olduname() はすべてのフィールドが長さ 9 を使っていた。 sys_uname() は長さ 65 を使っていた。 sys_newuname() も長さ 65 を使っているが、 domainname フィールドが追加されている。 glibc の uname() ラッパー関数は、これらの詳細をアプリケーションから隠蔽し、カーネルが提供しているシステムコールのうち最新のバージョンを起動する。

関連項目

uname(1), getdomainname(2), gethostname(2)

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
2008-12-03 Linux