c程序(linux):获取变量的命令行输出并过滤数据

c程序(linux):获取变量的命令行输出并过滤数据,c,command-line,variable-assignment,C,Command Line,Variable Assignment,我有一个运行以下命令的c程序: system("sudo grep '' /sys/class/dmi/id/board_*") 并在命令行上给出输出 我希望输出存储在c程序中的某个变量中,这样我就可以过滤board\u serial最简单的方法是将输出重定向到一个文件,然后读取该文件以解析输出 system("sudo grep '' /sys/class/dmi/id/board_* 1>out.txt 2>err.txt"); fd_out = fopen("out.txt"

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

system("sudo grep '' /sys/class/dmi/id/board_*")
并在命令行上给出输出


我希望输出存储在c程序中的某个变量中,这样我就可以过滤
board\u serial

最简单的方法是将输出重定向到一个文件,然后读取该文件以解析输出

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");
看一看。下面是一个简单的示例,说明如何使用它捕获程序输出:

#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;
}

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


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

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

你真的在使用
grep'/sys/class/dmi/id/board.*
?还是你故意省略了搜索字符串?如果你真的这么做了,
cat/sys/class/dmi/id/board.*
会更好。或者更好的是,只需
fopen()
每个文件(尽管您必须自己处理通配符位,这是使用
system()
方法的一个“好处”)。我认为,解决这个问题的最佳方法是使用
fopen()
打开文件,并将其内容读取到一个变量中。看起来用户只是想读取一个文件。看起来用户只需要读取一个文件内容。检查她感兴趣的内容的文件,这只是一行,里面有一个简单的字符串。
       http://www.yolinux.com/TUTORIALS/ForkExecProcesses.html