Linux c语言popen应用

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值