Disk Partitions Cylinders Heads Sectors Mbytes Model
1 4 2434 255 63 19092.9 Unavailable
Partition Status Type Volume Label Mbytes System Usage
C: 1 A PRIMARY WINDOWS98 6000.8 FAT32 31%
2 EXTENDED 5090.9 27%
D: 3 LOGICAL SHARE 5090.9 FAT32 27%
4 PRIMARY 7993.3 NTFS/HPFS 42%作者: crshen 时间: 2004-5-29 00:00 实现思路:
1. 分区信息表中,第二行第二个数字即为总分区数,但其中包含了extended分区,应去除;
2.从第五行起,凡DOS下可见的fat/fat32分区,均有盘符显示,倒数第二列显示分区类型;
3. 盘符与其后的分区数并不一致;
4.运行ghost,显示的分区与gdisk一致(同一公司产品嘛);作者: crshen 时间: 2004-5-29 00:00 /*从file文件的第row行开始查找string字符串,返回数组中1为找到*/
void GetPart32(char *file, int row, char *string, int *partition)
{
int i;
FILE *fpin;
char buffer[150];
if ((fpin = fopen(file, "r") == NULL)
exit( - 1);
for (i = 1; i < row; i++)
fgets(buffer, 150, fpin);
for (i = row; !feof(fpin); i++)
{
fgets(buffer, 150, fpin);
if (strstr(buffer, string) != NULL)
partition[i - row] = 1;
}
fclose(fpin);
}
该函数可用来查找extended分区个数等!作者: crshen 时间: 2004-5-29 00:00 /*在file文件中读row行,col列的字符串*/
char *GetPartNT(char *file, int row, int col)
{
char string[150], str[20], c;
int i, j, num = 0, word = 0;
FILE *fp;
if ((fp = fopen(file, "r") == NULL)
exit( - 1);
for (i = 0; i < row; i++)
fgets(string, 150, fp);
/* c为空格,没出现单词*/
for (i = 0; (c = string) != '\0'; i++)
if (c == ' ')
word = 0;
/* c不为空格,但上次c为空格,出现单词 */
else if (word == 0)
{
word = 1;
num++;
/*单词数累加*/
if (num == col)
for (j = i; string[j] != ' '; j++)
str[j - i] = string[j];
str[j - i] = '\0';
}
fclose(fp);
return str;
}