uname() - Unix、Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於TP  

uname() - Unix、Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

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 中陣列的長度未指定;欄位以空位元組 (’’ ’) 結尾。

返回值

成功時,返回零。發生錯誤時,返回 -1,並且 errno 被相應地設定。

錯誤

標籤描述
EFAULT buf 無效。

符合標準

SVr4、POSIX.1-2001。4.3BSD 中沒有 uname() 呼叫。

domainname 成員(NIS 或 YP 域名)是 GNU 擴充套件。

備註

這是一個系統呼叫,作業系統大概知道自己的名稱、版本和釋出版本。它還知道其執行的硬體。因此,結構體的四個欄位是有意義的。另一方面,欄位 nodename 毫無意義:它在某個未定義的網路中給出了當前機器的名稱,但通常機器位於多個網路中並具有多個名稱。此外,核心無法知道此類資訊,因此必須告知它在此處應答什麼。對於額外的 domainname 欄位也是如此。

為此,Linux 使用系統呼叫 sethostname(2) 和 setdomainname(2)。請注意,沒有標準規定由 sethostname(2) 設定的主機名與 uname() 返回的結構體的 nodename 欄位是相同的字串(實際上,某些系統允許 256 位元組的主機名和 8 位元組的節點名),但在 Linux 上確實如此。對於 setdomainname(2) 和 domainname 欄位也是如此。

結構體中欄位的長度各不相同。某些作業系統或庫使用硬編碼的 9 或 33 或 65 或 257。其他系統使用 SYS_NMLN 或 _SYS_NMLN 或 UTSLEN 或 _UTSNAME_LENGTH。顯然,使用任何這些常量都是一個壞主意;只需使用 sizeof(...)。通常選擇 257 以便為網際網路主機名留出空間。

已經存在三個 Linux 系統呼叫 uname()。第一個使用長度 9,第二個使用 65,第三個也使用 65 但添加了 domainname 欄位。

也可以透過 sysctl() 和 /proc/sys/kernel/{ostype, hostname, osrelease, version, domainname} 訪問 utsname 資訊的一部分。

參見



previous next Printer Friendly

廣告


  

廣告



廣告