如何在Linux Mint上使用Libparted列出所有连接的存储设备?
解决libparted遍历存储设备的问题
你的代码问题在于每次调用 ped_device_get_next(NULL) 都会从头返回第一个设备,导致无限重复输出同一SSD型号。根据libparted的文档说明:
ped_device_get_next() 返回全局设备列表中的下一个设备。如果 dev 为 NULL,则返回第一个设备。
要正确遍历所有设备,需将上一次获取的设备作为参数传入 ped_device_get_next(),以此依次获取下一个设备。修改后的代码如下:
#include <cmakeconfig.h> #include "mainheader.h" #include <iostream> // 确保包含iostream以使用std::cout int main() { ped_device_probe_all(); PedDevice *tempbed = NULL; int c = 0; // 循环获取下一个设备,直到返回NULL(无更多设备) while ((tempbed = ped_device_get_next(tempbed)) != NULL && c < 256) { std::cout << c << " " << tempbed->model << "\n"; c++; } return 0; }
关键修改说明:
- 初始化
tempbed为NULL,第一次调用ped_device_get_next(NULL)会返回列表中的第一个设备 - 后续每次调用传入当前的
tempbed,让函数返回列表中的下一个设备 - 循环终止条件改为当函数返回
NULL(无更多设备)或达到安全计数上限,同时避免了原代码中可能出现的空指针访问崩溃
这样就能正确遍历所有被探测到的存储设备,包括你的HDD。
内容的提问来源于stack exchange,提问作者Hubert Gonera
相关产品推荐
相关产品推荐

