Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
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 にある配列の長さは指定されていない (「注意」の節を参照)。 フィールドはヌル バイト ('\0') で終端される。
返り値
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。
エラー
EFAULT buf が有効でない。
準拠
POSIX.1-2001, POSIX.1-2008, SVr4. 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} を 使ってアクセスすることもできる。 C ライブラリとカーネルの違い 時間の経過とともに、 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), uts_namespaces(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。