熟悉Linux的都知道,Linux下硬盘的命名规则是had、hdb…sda、sdb之类的。但是,如何才能知道机器上到底有多少块硬盘呢?. c# `( J7 t% ~9 D, _* v9 d
刚开始,我以为/dev目录下会有所体现结果我发现设备文件存在并不代表这个设备。那么怎么办才好呢。后来我发现fdisk可以得到硬盘的数量。于是就阅读了一下fdisk的源代码。果然找到了Linux获取硬盘数量的方法。实例代码如下:2 V6 I9 F- Q1 ?8 C- A5 K
#include
; ?( I0 O5 b2 R: I" X0 K& Y" b4 [ #include
( q/ I% \+ A' I/ H, U" B) [2 r int GetDiskCount()9 U: B I& A4 G" m1 K( m7 X
{
4 H! l. k8 r* h/ W1 N6 d+ N S FILE* f = fopen("/proc/partitions", "r");# h) H: R$ {8 n1 I1 b' O" D
if (!f)
; e6 u$ c: _/ y) T% _' G' E {
1 ?- p- F* x4 a& O ^ fprintf(stderr, "fopen /proc/partitions failed!errno=%d\n", errno);$ c+ A5 ~; O; W/ P, {
return 0;
! k$ Q" I+ a | }9 ?! P+ S- }3 T, v( \" |2 y j$ p( c
char line[100], ptname[100], devname[120], *s;
) j& ~5 y- T+ a3 }, ]1 A8 B6 ` int ma, mi, sz;
$ E9 i4 a, W( X9 K int nDiskCount = 0; ?+ R' p) R+ z9 `" L) _, z
while (fgets(line, sizeof(line), f)); c; i0 u& }* {6 \3 d" _
{6 w; \" ?5 ^: x/ g! `( z. h
if (sscanf(line, " %u %u %u %[^\n ]",/ h) o' ~" P; |! F; _
&ma, &mi, &sz, ptname) != 4)
( d' y( y" R. F# A continue;
4 J7 s1 O( X( [, u4 j) Y0 R- t for (s = ptname; *s; s++): Q* t/ n% G( E$ A
continue;: |0 R- H3 H; k1 [, N$ ?
/* note: excluding '0': e.g. mmcblk0 is not a partition name! */
2 L' q! Q( O, H" `! i3 O if (s[-1] >= '1' && s[-1] |