UNAME

Section: Linux Programmer's Manual (2)
Updated: 2019-10-10
Index JM Home 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/ に書かれている。

関連キーワード

utsname   構造体   uname   カーネル   ネットワーク   マシン   リリース   ホスト   olduname   スロット   struct   ハードウェア   ドメイン   意味   複数   バイト   kernel   newuname   稼働中   システム情報   sysname   nodename   実装   release   オペレーション

Linux マニュアル 一覧

関連するコマンド・関数

oldolduname.2   uname.2   uname.1   dnsdomainname.1   domainname.1   nisdomainname.1
 

Index

名前
書式
説明
返り値
エラー
準拠
注意
C ライブラリとカーネルの違い
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:38:55 GMT, October 11, 2026