【问题标题】:Check output from popen检查 popen 的输出
【发布时间】: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 不能用作字符串。而且您必须始终检查错误。 popenfread 都可能失败。或fread 回复短读。
  • 使用fgets 而不是fread。这将解决 SomeProgrammerDude 对空终止的担忧。尽管您可能仍然需要担心输出包含两个或更多匹配行的可能性。

标签: c popen


【解决方案1】:

你应该使用 strstr() 函数: 该函数有两个参数,字符串(缓冲区)和子字符串('ERROR')。

if(strstr(buffer, "ERROR"))
    return true;
else
    return false; 

此函数在名为“buffer”的字符串中查找字符串“ERROR”

【讨论】:

    猜你喜欢
    • 2012-03-09
    • 2020-04-30
    • 1970-01-01
    • 2013-05-20
    • 2015-09-21
    • 2021-04-01
    • 1970-01-01
    • 2015-12-08
    • 2012-05-26
    相关资源
    最近更新 更多