liunx 使用API 获取挂载的所有硬盘信息,不包括文件系统
时间: 2024-09-17 22:06:04 浏览: 57
在Linux中,你可以使用`blkid`命令行工具或者内核提供的接口来获取所有硬盘及其相关信息,而不包括文件系统信息。`blkid`通常用于快速查找块设备的UUID(通用唯一标识符),这对于挂载点管理非常有用。
如果你想要通过编程接口获取这些信息,可以利用`libudev`库,它提供了设备相关的API。以下是使用`libudev`获取硬盘基本信息的一个简单示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <dirent.h>
#include <libudev.h>
void list_block_devices(int fd) {
struct dirent* entry;
char path[PATH_MAX];
while ((entry = readdir(fd))) {
if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) continue;
snprintf(path, sizeof(path), "%s/%s", "/sys/block/", entry->d_name);
if (access(path, R_OK)) {
printf("Device %s seems to be a block device.\n", entry->d_name);
} else {
printf("Device %s is not a block device or not accessible.\n", entry->d_name);
}
}
}
int main() {
int fd;
struct dirent **namelist;
size_t numentries;
struct stat sb;
fd = open("/sys/class/block", O_RDONLY | O_DIRECTORY);
if (fd < 0) {
perror("Error opening /sys/class/block");
return -1;
}
numentries = scandir(fd, &namelist, NULL, alphasort);
if (numentries <= 0) {
perror("Error scanning directory");
close(fd);
return -1;
}
for (size_t i = 0; i < numentries; ++i) {
struct stat info;
if (lstat(namelist[i]->d_name, &info) == 0 && S_ISBLK(info.st_mode)) {
list_block_devices(fd);
}
}
free(namelist);
close(fd);
return 0;
}
```
这个脚本会列出`/sys/class/block`目录下的所有块设备,并检查每个设备是否可以直接访问。
阅读全文