c程序(linux):获取变量的命令行输出并过滤数据
我有一个运行以下命令的c程序: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"
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