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