Linuxc获取U盘挂载路径

编程

思路:

  1、执行df -h 找到 带mnt的行。将结果存入一个文件中。

  system("df -h |grep mnt >./extendevinfo.txt");  也可以直接popen用管道打开,感觉
效率可能会更高一些。

        2、解析文件中最后/mnt/XXX部分即为挂载路径。(具体看自己内核挂载路径,可能会有差异)

例如本人系统挂载U盘后的df -h |grep mnt,结果如下:

eg:/dev/sda                 14.6G      9.6G      5.0G  66% /mnt/exUDISK

  3、解析到空格最后的内容就是U盘的挂载路径了:/mnt/exUDISK。

/*

*@brief 获取U盘挂载路径

*@param 获取的挂载路径

*@return 成功返回0.失败返回-1

*/

staticint GetUDiskMountPath(char * mnt_path)

{

int fd = 0, ret = 0, rdsize = 0;

char buf[1024] = {0};

fd = open("./extendevinfo.txt", O_CREAT | O_RDWR | O_NONBLOCK | O_TRUNC, 0777);

if(fd < 0)

{

printf("open error

");

return - 1;

}

ret = system("df -h |grep mnt >./extendevinfo.txt");

if(ret)

{

// printf("system error

");

return - 1;

}

rdsize = read(fd, buf, sizeof(buf));

// printf("buf = %s

", buf);

if(rdsize < 2)

{

printf("read error

");

return - 1;

}

ret = analysis_monut_info(buf, mnt_path);

close(fd);

return ret;

}

/*

*@brief 从buf中返回最后一组为/mnt/exUDISK为挂载路径

eg:/dev/sda 14.6G 9.6G 5.0G 66% /mnt/exUDISK

*@param 获取的挂载路径

*@return 成功返回0.失败返回-1

*/

staticint analysis_monut_info(char *buf, char *path)

{

char *info = buf;

char value[128] = {0};

int ret = 1;

// printf("@buf %s", buf);

while(0 != ret)

{

sprintf(path, "%s", value);

memset(value, 0, sizeof(value));

ret = get_info_value(&info, value);

}

return ret;

}

/*

*@brief 从buf中返回用空格和换行为分隔符的部分。并向前移动地址位置。

*@param info 查找的源,value 返回的字符串

*@return 成功返回0.失败返回-1

*/

staticint get_info_value(char **info, char *value)

{

char *vernier = 0;

int i = 0;

vernier = *info;

while((*vernier == "") || (*vernier == "

"))

{

vernier++;

}

for(i = 0; *vernier != 32 && *vernier != "

" && *vernier != "" && i < 64;i++)

{

value[i] = *vernier;

vernier++;

}

if(*vernier == "")

{

return0;

}

*info = vernier;

return - 1;

}

 

以上是 Linuxc获取U盘挂载路径 的全部内容, 来源链接: utcz.com/z/520544.html

回到顶部