思路:

  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
*/
static int 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\n");
return - 1;
}
ret = system("df -h |grep mnt >./extendevinfo.txt");
if(ret)
{
// printf("system error\n");
return - 1;
} rdsize = read(fd, buf, sizeof(buf));
// printf("buf = %s\n", buf);
if(rdsize < 2)
{
printf("read error\n");
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
*/
static int 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
*/
static int get_info_value(char **info, char *value)
{
char *vernier = 0;
int i = 0;
vernier = *info;
while((*vernier == ' ') || (*vernier == '\n'))
{
vernier++;
}
for(i = 0; *vernier != 32 && *vernier != '\n' && *vernier != '\0' && i < 64;i++)
{
value[i] = *vernier;
vernier++;
}
if(*vernier == '\0')
{
return 0;
}
*info = vernier;
return - 1;
}

最新文章

  1. SSIS Design6:利用数据流
  2. Codeforces Round #363 (Div. 2)
  3. Visual Studio 2015 Update 3 ISO
  4. LXC docker
  5. Log4net中的调错
  6. ruby on rails 里使用SideKiq 做后台任务
  7. C#快速学习笔记(译)
  8. Android testing tools
  9. 在DLL动态链接库中封装VCL的MDI子窗体
  10. javascript的页面加载及性能优化(兼容IE7)
  11. Excel 转 vCard格式、CSV格式
  12. 【BZOJ1216】操作系统(堆,模拟)
  13. 从javascript发展说到vue
  14. 创建xml文件、解析xml文件
  15. Google protobuf解析消息逻辑的版本问题
  16. switch查询成绩、公司年销售额求和、根据工龄求工资
  17. 2015.4.21第一篇cnblog文章
  18. Java基础——详尽说明try-catch-finally的用法
  19. package.json浅谈
  20. 学习mybatis-3 step by step 篇二

热门文章

  1. 齐博x1fun实例 鉴于很多人问列表的筛选怎么放到首页、内容页等等地方 贴出方法
  2. 齐博x2模型里边钩子的创建与使用
  3. 记一次 .NET 某娱乐聊天流平台 CPU 爆高分析
  4. 【pytest官方文档】解读- 开发可pip安装的第三方插件
  5. SQL---ltrim()和rtrim()函数的使用
  6. k8s机器群扩容问题
  7. 长事务 (Long Transactions)
  8. windows socket网络编程--事件选择模型
  9. VS 生成后事件中自动修改文件名插入当前时间
  10. [HNCTF]Web详解_原创