官术网_书友最值得收藏!

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,返回一個基于該機器因特網地址的值,但這對許可證管理來說還不夠安全。

主站蜘蛛池模板: 安庆市| 广安市| 健康| 刚察县| 益阳市| 恭城| 德昌县| 德格县| 凌云县| 大宁县| 龙川县| 灵璧县| 弋阳县| 镇平县| 页游| 长子县| 同德县| 丹巴县| 绥化市| 平度市| 泰兴市| 衡阳县| 桐梓县| 乐至县| 宁波市| 阿图什市| 兴和县| 三河市| 微山县| 苏尼特右旗| 屏边| 金沙县| 双江| 谷城县| 烟台市| 闸北区| 古蔺县| 航空| 巧家县| 三门县| 津南区|