【发布时间】:2021-06-28 20:25:05
【问题描述】:
我有一个简单的 C 程序,我正在尝试分析 bash 命令的输出。
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *rd;
char buffer[100];
rd=popen("dmesg | grep FTDI","r"); //bash command with pipe opened in reading mode
if (rd == NULL)
{
puts("Unable to open process");
return(1);
}
fread(buffer, 1, 100, rd); //will read 100 characters
printf("%s\n", buffer);
pclose(rd);
}
现在我成功打印出缓冲区。我的目标是分析输出,并搜索字符串“ERROR” 我是 C 新手,我认为有一个函数 strcmp 可以比较输出。有什么建议吗?
【问题讨论】:
-
您要查找的函数是
strstr()。它将在字符串中搜索子字符串。 -
请注意,读入
buffer的输出不会以空值终止。因此buffer不能用作字符串。而且您必须始终检查错误。popen和fread都可能失败。或fread回复短读。 -
使用
fgets而不是fread。这将解决 SomeProgrammerDude 对空终止的担忧。尽管您可能仍然需要担心输出包含两个或更多匹配行的可能性。