linux c语言检测硬盘个数挂载硬盘,Linux下C语言来检测USB设备以及自动区分U盘和硬盘并自动挂载...

#include#define DEVTYPE_DISK 2

#define DEVTYPE_U 3

//外部设备的子结构

typedef struct tagDevParam_T

{

unsigned char devname[12];

unsigned char devtype;///2----硬盘,3----U盘

unsigned char partition_count;

unsigned int dev_totalspace;//KB

unsigned int partition_size[12];/*分区大小,单位KB*/

} tagDevParam_t, *ptagDevParam_t;

typedef struct tagDevinfo_T

{

tagDevParam_t dev[8];

int devcount; /*总共的设备数量*/

int disk_num;

} tagDevinfo_t, *ptagDevinfo_t;

int DvrCpFile(char *srcFile, char *targetFile, int findString, char *string)

{

int ret = 0;

FILE *srcfp = NULL;

FILE *targetfp = NULL;

int length = 0;

ssize_t size;

size_t len = 0;

char *p = NULL;

char *line = NULL;

if(access(srcFile, F_OK) != 0)

{

printf("ERROR: src file is not exist!");

return -1;

}

if(ret == 0)

{

srcfp = fopen(srcFile, "r");

targetfp = fopen(targetFile, "w+");

if((targetfp != NULL) && (srcfp != NULL))

{

while((size = getline(&line, &len, srcfp)) != -1)

{

if(size > 0)

{

if(findString == 1)

{

p = strstr(line, string);

if(p != NULL)

{

length = fwrite(line, size, 1, targetfp);

}

}

else

{

length = fwrite(line, size, 1, targetfp);

}

}

}

fclose(srcfp);

fclose(targetfp);

if(line)

{

free(line);

}

ret = 0;

}

else

{

if(srcfp)

{

printf("ERROR: open flie %s", targetFile);

fclose(srcfp);

}

if(targetfp)

{

printf("ERROR: open flie %s", srcFile);

fclose(targetfp);

}

ret = -1;

}

}

return ret;

}

int CheckIsDiskOrUsbDisk(unsigned char *devname)

{

FILE *fp;

int ret = -1;

char buffer[80], * line = NULL;

ssize_t size;

size_t len = 0;

int fal=0;

memset(buffer, 0, 80);

char tmpfilename[64];

if(tmpnam(tmpfilename) == NULL)

{

sprintf(tmpfilename, "%s", "/tmp/check_dev_type.txt");

}

fp = fopen(tmpfilename, "w+");

sprintf(buffer, "/sys/block/%s/removable", devname);

DvrCpFile(buffer, tmpfilename, fal, NULL);

size = getline(&line, &len, fp);

fclose(fp);

ret = atoi(line);

switch(ret)

{

case 0:

ret = DEVTYPE_DISK;

break;

case 1:

ret = DEVTYPE_U;

break;

default:

ret = -1;

break;

}

if(line)

{

free(line);

}

remove(tmpfilename);

return ret;

}

int main(){

int xx=1,i=0,dev_tpye;

ssize_t size;

size_t len = 0;

unsigned char k;

tagDevinfo_t devinfo;

char tmp_devname[12];

char *line = NULL;

char *pname;

char *token;

char seps[] = " ";

FILE *fp = NULL;

bzero(tmp_devname, 12);

bzero(&devinfo, sizeof(devinfo));

DvrCpFile("/proc/partitions", "/tmp/partitions.txt", xx, "sd");

fp = fopen("/tmp/partitions.txt", "r");

/*获得系统 硬盘 和移动设备总结构*/

while((size = getline(&line, &len, fp)) != -1)

{

pname = strrchr(line, ' ');

if(pname == NULL)

continue;

pname++;

if(memcmp(pname, tmp_devname, 3) == 0) //新分区

{

i = 0;

token = strtok(line, seps);

while(token != NULL)

{

if(i == 2)

{

k=devinfo.dev[devinfo.devcount-1].partition_count;

devinfo.dev[devinfo.devcount-1].partition_size[k]=atoi(token);

}

i++;

token = strtok(NULL, seps);

}

devinfo.dev[devinfo.devcount-1].partition_count++;

}

else//新设备

{

memcpy(devinfo.dev[devinfo.devcount].devname, pname, 3);

i = 0;

token = strtok(line, seps);

while(token != NULL)

{

if(i == 2)

{

devinfo.dev[devinfo.devcount].dev_totalspace = atoi(token);

}

i++;

token = strtok(NULL, seps);

}

devinfo.devcount++;

}

memcpy(tmp_devname, pname, 3);

}

printf("dve count =%d\n",devinfo.devcount);

for(i = 0; i < devinfo.devcount; i++){

printf("dev name=%s\n",devinfo.dev[i].devname);

dev_tpye = CheckIsDiskOrUsbDisk(devinfo.dev[i].devname);

devinfo.dev[i].devtype = dev_tpye;

if(devinfo.dev[i].devtype == DEVTYPE_U)

{

printf("this is USB drive");

}

if(devinfo.dev[i].devtype == DEVTYPE_DISK)

{

printf("this is hard drive");

}

}

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值