C 程序 (Linux):获取变量的命令行输出并筛选数据



我有一个运行以下命令的 c 程序:

system("sudo grep '' /sys/class/dmi/id/board_*")

并在命令行上给出输出。

我希望输出存储在c程序中的某个变量中,以便我可以过滤board_serial

看看 popen。下面是如何使用它来捕获程序输出的简单示例:

#include<stdio.h>
int main()
{
    FILE *p;
    p = popen("ls -l", "r");
    if(!p) {
        fprintf(stderr, "Error opening pipe.n");
        return 1;
    }
    while(!feof(p)) {
        printf("%c", fgetc(p));
    }
    if (pclose(p) == -1) {
        fprintf(stderr," Error!n");
        return 1;
    }
    return 0;
}

但是,看起来您只想从文件中读取一些值,对吗?我宁愿只打开(fopen())包含值的文件,并将这些值读取到我的 C 程序中的变量中。尝试这样的事情(只是一个简单的例子):

#include<stdio.h>
#include<stdlib.h>
#define MAX 100
int main()
{
    FILE *fp;
    char result[MAX];
    int i;
    char c;
    fp = fopen("/sys/class/dmi/id/board_name", "r");
    if(!fp) {
        fprintf(stderr, "Error opening file.n");
        return 1;
    }
    i = 0;
    while((c = fgetc(fp)) != EOF) {
        result[i] = c;
        i++;
    }
    result[i] = '';
    printf("%s", result);
    i = atoi(result);
    printf("%d", i);
    if (fclose(fp) == -1) {
        fprintf(stderr," Error closing file!n");
        return 1;
    }
    return 0;
}

最简单的方法是将输出重定向到文件并读取该文件以解析输出。

system("sudo grep '' /sys/class/dmi/id/board_* 1>out.txt 2>err.txt");
fd_out = fopen("out.txt", "r");
fd_err = fopen("err.txt", "r");

或者您可以使用popen功能。

fd_out = popen("sudo grep '' /sys/class/dmi/id/board_*", "r");

使用 dup 或 dup2 将标准输出 fd 复制到文件 fd

Man dup/dup2

是的,popen绝对是最好的选择。看看这里

       http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html

最新更新