Linux c语言popen应用

发布于:2024-05-15 ⋅ 阅读:(179) ⋅ 点赞:(0)

如果你只想运行 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 或正则表达式。


网站公告

今日签到

点亮在社区的每一天
去签到