int uname(struct utsname *buf);
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') で終端される。
domainname メンバー (NIS または YP ドメイン名) は GNU の拡張である。
このため 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} を使ってアクセスすることもできる。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]