以編程方式確定當前機器是否運行Ubuntu,它具有哪種體系結構以及它運行的是哪個版本的Ubuntu的最佳方式是什麼?以編程方式確定Ubuntu發行版和體系結構?
一種方法是掃描uname -a
的輸出以檢查正確的內核版本和體系結構。
另一種方法是掃描/etc/apt/sources.list
的Ubuntu發行版關鍵字(EQ precise
,quantal
等)
有沒有更好的辦法?
以編程方式確定當前機器是否運行Ubuntu,它具有哪種體系結構以及它運行的是哪個版本的Ubuntu的最佳方式是什麼?以編程方式確定Ubuntu發行版和體系結構?
一種方法是掃描uname -a
的輸出以檢查正確的內核版本和體系結構。
另一種方法是掃描/etc/apt/sources.list
的Ubuntu發行版關鍵字(EQ precise
,quantal
等)
有沒有更好的辦法?
一種方法是掃描uname的輸出-a以檢查正確的內核版本和體系結構。
但是人們通常不想分析這些工具的輸出,因爲它不夠優雅(它被認爲是黑客,所以可以這麼說)。
但是,您可以使用uname()
功能/系統調用:
#include <sys/utsname.h>
struct utsname sysinfo;
if (uname(&sysinfo) < 0) {
printf("Cannot determine OS\n");
exit(-1);
}
printf("Operating system name: %s\n", sysinfo.sysname);
在我的Ubuntu系統上sysinfo.sysname是「Linux」有點恕恕恕我直言,恕我直言 – MonoThreaded
除了uname -a
,有幾種方式來獲得關於當前分佈的信息。
最好的方法是解析發佈文件。他們通常以-release
或_release
結尾,並位於/etc
。以下命令將全部找到它們。
ls /etc/*{-,_}release
lsb_release
redhat-release
slackware-release
gentoo-release
Debian的相應的文件是/etc/debian_version
。不過,這個文件也會(在某種程度上誤導性的,但是有一個很好的理由)出現在Ubuntu系統上。
另一個文件是/etc/issue
其用於機器標識和預登錄提示可以被用來確定當前分佈的信息。
系統信息也可以在/proc/version
找到。
cat /proc/version
據我所知大多數Linux發行版也使用/etc/issue
。其中的文字可能已被管理員更改爲顯示不同的登錄信息。在Fedora
樣品:從Ubuntu的
Fedora release 17 (Beefy Miracle)
Kernel \r on an \m (\l)
樣品:
Ubuntu 11.04 \n \l
您可以使用圖書館作爲一箇中立的操作系統。解決方案是lsb,您的問題已接近using lsb question。
/etc/lsb-release可能有線索 –