思路: 1、執行df -h 找到 帶mnt的行。將結果存入一個文件中。 system("df -h |grep mnt >./extendevinfo.txt"); 也可以直接popen用管道打開,感覺效率可能會更高一些。 2、解析文件中最後/mnt/XXX部分即為掛載路徑。(具體看自己內核掛載路徑 ...
思路:
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; }