- Linux程序設計(第4版)
- (英)Neil Matthew Richard Stones
- 775字
- 2021-04-09 20:04:48
4.6 主機信息
正如程序可以查找用戶信息一樣,程序也可以獲得運行它的計算機的有關細節。uname命令就提供這類信息。我們還可以通過同名的系統調用在C語言程序中提供同樣的信息——請使用man 2 uname命令在手冊頁的系統調用部分(第2部分)查找它的用法。
主機信息在許多情況下都是很有用的。你可能希望根據程序運行的機器在網絡上的名字來定制程序的行為,比如說,這臺機器是學生用的還是管理員用的。從許可證的角度考慮,你可能希望限制程序只能在一臺機器上運行。所有這些都意味著你需要一個方法來確定程序運行在哪臺機器上。
如果系統安裝了網絡組件,你可以通過gethostname函數很容易地獲取它的網絡名:

gethostname函數把機器的網絡名寫入name字符串。該字符串至少有namelen個字符長。成功時,gethostname返回0,否則返回-1。
你可以通過uname系統調用獲得關于主機的更多詳細信息:

uname函數把主機信息寫入name參數指向的結構。utsname結構定義在頭文件sys/utsname.h中,它至少包含表4-5所示的成員。
表4-5

uname在成功時返回一個非負整數,否則返回-1并設置errno來指出錯誤。
實驗 主機信息
下面的程序hostget.c能夠提取出一些主機信息:

它給出如下所示的Linux特有的輸出。如果你的機器聯網了,你可能會看到一個包含網絡名在內的擴展主機名。

實驗解析
這個程序調用gethostname來獲得主機的網絡名。在上面的例子中,它獲得名字suse103。有關這臺基于Intel Pentium-4的Linux計算機的更多信息通過uname調用返回。注意,uname返回的字符串的格式是與具體實現相關的,在本例中,版本字符串包含內核編譯的日期。
使用uname函數的另外一個例子請參看uname命令的Linux源代碼。
每臺主機的唯一標識符可以通過gethostid函數獲得:

gethostid函數返回與主機對應的一個唯一值。許可證管理者利用它來確保軟件程序只能在擁有合法許可證的機器上運行。在Sun工作站上,該函數返回計算機生產時設置在非易失性存儲器中的一個數字,它對系統硬件來說是唯一的。其他系統,如Linux,返回一個基于該機器因特網地址的值,但這對許可證管理來說還不夠安全。
- HTML5+CSS3+JavaScript從入門到精通:上冊(微課精編版·第2版)
- Learning Spring 5.0
- 匯編語言程序設計(第2版)
- 人臉識別原理及算法:動態人臉識別系統研究
- 零基礎學MQL:基于EA的自動化交易編程
- 從Java到Web程序設計教程
- C++從入門到精通(第5版)
- SSM開發實戰教程(Spring+Spring MVC+MyBatis)
- Python3.5從零開始學
- FPGA嵌入式項目開發實戰
- Mastering Concurrency Programming with Java 9(Second Edition)
- 超簡單:Photoshop+JavaScript+Python智能修圖與圖像自動化處理
- Learning D3.js 5 Mapping(Second Edition)
- LabVIEW入門與實戰開發100例(第4版)
- Isomorphic JavaScript Web Development