Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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/ に書かれている。