熟悉linux的都知道,linux下硬碟的命名規則是had、hdb…sda、sdb之類的。但是,如何才能知道機器上到底有多少塊硬碟呢?
剛開始,我以為/dev目錄下會有所體現結果我發現裝置檔案存在並不代表這個裝置。那麼怎麼辦才好呢。後來我發現fdisk可以得到硬碟的數量。於是就閱讀了一下fdisk的源**。果然找到了linux獲取硬碟數量的方法。例項**如下:
#include
#include
int getdiskcount()
char line[100], ptname[100], devname[120], *s;
intma, mi, sz;
int ndiskcount = 0;
while (fgets(line, sizeof(line), f))
fclose(f);
return ndiskcount;
}int main(int argc, char * argv)
其實,原理很簡單。就是通過proc檔案系統獲得。在proc檔案系統中有乙個名為partitions的檔案。這個檔案中包含本地磁碟的硬碟及分割槽信 息。根據linux下裝置命名規則,如果裝置名的最後乙個字元是數字就應該是分割槽,否則就是硬碟。於是,我們就可以輕而易舉的知道電腦中有幾個硬碟。
當然,根據這個檔案,還可以知道硬碟裝置名稱以及每個硬碟中分割槽的數量和每個分割槽的裝置名稱。至於如何獲取,大家應該都會的。
獲取硬碟資訊:
現在,我們已經可以知道硬碟數量、硬碟的裝置名稱、分割槽數及分割槽的裝置名稱。那麼,怎麼才能知道這些裝置的資訊呢?比如硬碟大小、扇區大小、分割槽大小、分割槽已經使用的大小等等。
關於硬碟的資訊,在fdisk的原始碼中也可以找到相關的原始碼。例項**如下:
#include
#include
int getdiskcount()
char line[100], ptname[100], devname[120], *s;
intma, mi, sz;
int ndiskcount = 0;
while (fgets(line, sizeof(line), f))
fclose(f);
return ndiskcount;
}int main(int argc, char * argv)
其實,就是通過開啟裝置檔案然後分別呼叫ioctl來獲取硬碟的大小、扇區大小、chs資訊等等。程式執行結果如下:
user:~/$sudo ./diskinfo /dev/sda
disk /dev/sda infomation:
size: 42949672960 bytes 40.00 gb
sectorsize: 512 bytes
heads: 255
sectors: 63
cylinders: 5221
start: 0
linux下獲取硬碟的序列號資訊
ide的 include include include static void dump identity const struct hd driveid id int main void else printf hdio get identity failed return 0 static v...
在linux環境下獲取相關硬體資訊
這兩天,因為程式中的乙個功能需要用到硬體的一些資訊,如處理器的序列號,硬碟的序列號,和網絡卡的實體地址,查詢了一下這方面的資料,由於網上這方面的資料也是比較多,但多而不全,找起來比較花氣力。現將這兩天的看的東西稍微做個總結,希望以後再遇到這方面問題的時候少走點彎路。的實現可以看看這篇文章 http ...
Linux下獲取CPUID 硬碟序列
linux下獲取cpuid 硬碟序列號與mac位址 woonjoon 按照網上提供的說明,cpuid並不是所有的intel cpu都支援的。如果支援,彙編呼叫為 eax置0000 0003,呼叫cpuid。以下為實現 在我的cpu上,並沒有得到 define cpuid in,a,b,c,d asm...