如果你只想运行 fdisk -l 命令并读取其输出,而不指定特定的设备,你可以使用 popen(“fdisk -l”, “r”) 来执行这个命令。但是,如果你想检查特定设备(比如 /dev/sda)上是否有 “Hidden Win95 FAT32” 分区,你需要在命令中包含这个设备名称。
不过,如果你想先运行 fdisk -l 来获取所有设备的列表,然后搜索特定设备上的 “Hidden” 分区,你需要遍历输出并检查每一行是否包含你关心的设备名称和 “Hidden” 关键字。
以下是一个简化的示例,展示了如何读取 fdisk -l 的输出并搜索特定设备上的 “Hidden” 分区:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int is_hidden_win95_fat32_on_device(const char *device) {
char command[1024];
FILE *fp;
char line[1024];
int found = 0;
// 构建命令字符串(这里不指定设备,因为我们要搜索所有设备)
snprintf(command, sizeof(command), "fdisk -l");
// 执行命令并获取输出
fp = popen(command, "r");
if (fp == NULL) {
perror("popen");
return 0;
}
// 读取输出并检查是否包含特定设备的"Hidden"分区
while (fgets(line, sizeof(line), fp) != NULL) {
// 去除行尾的换行符
line[strcspn(line, "\n")] = 0;
// 检查当前行是否包含我们关心的设备名称
if (strstr(line, device) != NULL) {
// 进一步检查这一行是否也包含"Hidden"
if (strstr(line, "Hidden") != NULL) {
found = 1;
printf("在设备 %s 上发现 Hidden Win95 FAT32 分区\n", device);
break; // 找到后退出循环
}
}
}
// 关闭文件指针
pclose(fp);
return found;
}
int main() {
const char *device = "/dev/sda"; // 替换为你关心的设备名称
if (is_hidden_win95_fat32_on_device(device)) {
printf("找到了隐藏的 Win95 FAT32 分区!\n");
} else {
printf("未在指定设备上找到隐藏的 Win95 FAT32 分区。\n");
}
return 0;
}
请注意,这个示例中的 strstr 调用可能会在设备名称的部分匹配时返回 true,即使整个设备路径没有完全匹配。如果你需要更精确的匹配(比如确保整个设备路径都匹配),你可能需要使用更复杂的字符串处理函数,如 strncmp 或正则表达式。