Rechercher une page de manuel

Chercher une autre page de manuel:

uname

Autres langues

Langue: ja

Version: 2001-12-15 (mandriva - 01/05/08)

Autres sections - même nom

Section: 2 (Appels système)

名前

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

書式

#include <sys/utsname.h>

int uname(struct utsname *buf);

説明

uname() は buf で指される構造体にシステム情報を返す。 utsname 構造体は <sys/utsname.h> で以下のように定義されている。
 
 struct utsname {
     char sysname[];
     char nodename[];
     char release[];
     char version[];
     char machine[];
 #ifdef _GNU_SOURCE
     char domainname[];
 #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 が選ばれることが多い。

Linux システムコール uname() はこれまでに 3 種類存在した。 最初の uname() は長さ 9 を使っていた。 次のものは長さ 65 を使っていた。 現在でも長さ 65 を使っているが、domainname フィールドが追加された。

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

関連項目

uname(1), getdomainname(2), gethostname(2)
La nature de la matière ne consiste point en ce qu'elle est une chose
dure, pesante ou colorée, mais seulement en ce qu'elle est une substance
étendue en longueur, largeur, et profondeur.
-+- René Descartes -+-