GPT HDD识别

以下内容引自http://wenku.baidu.com/link?url=Cz2X4oNh30ku3clze12IwvR0YiTn8NCYQScNDZ-a_ZIGLTWisKymxw8Kd8buiaTQIYFVvmC4jSdQ70HrhawApHDnlgqwDcNWNFN36rKGj9a


GPT是EFI的一部分,为保护GPT不受MBR类磁盘管理软件的危害,GPT在主引导扇区建立了一个保护分区的MBR分区表,这种分区的类型标识为0xEE。它可以让MBR类磁盘管理软件把gpt看成一个未知格式的分区,而不是当成一个未分区的磁盘


基于上面的一段话,在用fdisk命令查看磁盘的时候,可以找到一般GPT 磁盘有"ee EFI GPT"的描述,因此可以search这样的关键字判断是否为GPT磁盘。一般在mount GPT HDD的时候会发生mount fail的情形,这个时候是拿不到dev_path的,但是可以拿到dev_name。因此下面的一段代码实现是用于查看GPT HDD的。


void get_gpt_flag(char * dev_name)

{

    CHAR *ps_getgptcmd = NULL;

    CHAR *ps_dev_path = NULL;

    INT32 i4_gptret = 0;

    CHAR uc_gpt_flag[32];

     FILE   *fp = NULL;


     //init

     c_memset(&uc_gpt_flag, 0, sizeof(CHAR)*32);

     c_memset(&ps_dev_path, 0, sizeof(CHAR)*32);

     c_memset(&ps_getgptcmd, 0, sizeof(CHAR)*64);

    

     //get command fdisk -l /dev/sd*|grep "ee EFI GPT"|wc -l >/tmp/gpt.txt

     c_strncpy(ps_dev_path, " /dev/", c_strlen(" /dev/"));     //ERROR1

     c_strncat(ps_dev_path, dev_name, c_strlen(dev_name));

     c_strncpy(ps_getgptcmd, "fdisk -l", c_strlen("fdisk -l"));

     c_strncat(ps_getgptcmd, ps_dev_path, c_strlen(ps_dev_path));     

     c_strncat(ps_getgptcmd, "|grep \"ee EFI GPT\"|wc -l >/tmp/gpt.txt", c_strlen("|grep \"ee EFI GPT\"|wc -l >/tmp/gpt.txt"));

   

      fp = fopen("/tmp/gpt.txt", "wt+");        //ERROR2

       i4_gptret = ipcd_exec(ps_getgptcmd, NULL); 


       //read gpt flag and then set it.

       if ((0 ==i4_gptret) && (1 == fread(&uc_gpt_flag, sizeof(CHAR)*32, 1, fp)) )

       {

           //command exec ok and save result to uc_gpt_flag.

           if (c_strncasecmp(&uc_gpt_flag[0], "1", 1) ==0)

               set gpt flag TRUE here;      

       }  

       else

       {

           execute error;

       }

       //free memory

       fclose(fp);

       fp = NULL;

       c_mem_free(ps_getgptcmd);

       c_mem_free(ps_dev_path);

}







































































评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值