UNAME
Section: Linux Programmer's Manual (2)
Updated:  2019-10-10
Index
JM Home Page
roff page
 
名前
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/ に書かれている。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - エラー
 - 
 - 準拠
 - 
 - 注意
 - 
- C ライブラリとカーネルの違い
 - 
 
 - 関連項目
 - 
 - この文書について
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:43 GMT, November 24, 2023