在 Linux 上使用 C ,如何檢測塊設備?現在,我正在使用這段代碼:
for (const auto &entry : std::filesystem::directory_iterator("/dev/"))
{
std::string name = entry.path().filename().string();
if (name.find("sd") == 0 || name.find("nvme") == 0 || name.find("hd") == 0 || name.find("vd") == 0 || name.find("xvd") == 0)
{
std::cout << "Found device: " << entry.path() << std::endl;
}
}
這在實踐中效果很好,但幾乎可以肯定它不是“應該完成”的方式。而且它也不完美,因為它錯過了 losttup 設備,因為我沒有包含"loop",它也錯過了網路塊設備,因為我沒有包含"nbd".
uj5u.com熱心網友回復:
std::filesystem::directory_entry有一個is_block_file()用于這個確切目的的方法:
檢查指向的物件是否是塊設備。
例如:
for (const auto &entry : std::filesystem::directory_iterator("/dev/"))
{
if (entry.is_block_file())
{
std::cout << "Found device: " << entry.path() << std::endl;
}
}
uj5u.com熱心網友回復:
像這樣的東西應該這樣做(未經測驗,為了簡潔沒有錯誤檢查):
const char *maybe_block_device = ...;
struct stat st;
stat (maybe_block_device, &st);
bool is_block_device = S_ISBLK (st.st_mode);
S_ISBLK“助手”宏在哪里。
此處和此處的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/491930.html
