c++ - 如何读取 C++ 中系统调用失败时显示的失败日志消息?

标签 c++ linux

我有一个调用测试的 C++ 代码。我正在做一个系统调用来执行这个测试。当此测试失败时,它将显示类似这样的内容“错误:无法发现以下组件类型的一个或多个设备:”

我有一个在 Linux redhat 上运行的 C++ 代码,它能够检测系统调用是通过还是失败。但它无法捕获错误消息(错误:无法发现以下组件类型的一个或多个设备:)并将其附加到日志文件或打印出来。

有人可以告诉我如何捕获错误消息(错误:无法发现以下组件类型的一个或多个设备:)? PS:我是一名实习生,任何帮助都会非常好。

#include<iostream.h>
int main () 
{   
  int i;   
  if (system(NULL)) 
    puts ("Ok");   
  else 
    exit (1);

  i=system("hpsp --discover -verbose --user Admin --oapasswd password");  

  printf ("The value returned was: %d.\n",i);

  return false;
}

最佳答案

而不是使用 system() 使用 popen() .这将打开一个捕获测试程序标准输出的管道,以便您的程序可以通过管道读取它。

示例已编辑:

#define _BSD_SOURCE 1
#define BUFFSIZE 400

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
    char *cmd = "hpsp --discover -verbose --user Admin --oapasswd password";

    char  buf[BUFFSIZE];
    char* searchResult;
     int  testPassed = 0;

    FILE *ptr;

    if ((ptr = popen(cmd, "r")) != NULL)
        while (fgets(buf, BUFFSIZE, ptr) != NULL)
        {
            if ((searchResult = strstr(buf, "The test passed")) != NULL )
            {
                testPassed = 1;
                break;
            }
        }

    if (testPassed)
        printf("yea!!\n");
    else
        printf("boo!!\n");

    pclose(ptr);

    return 0;
}

关于c++ - 如何读取 C++ 中系统调用失败时显示的失败日志消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9287253/

相关文章:

linux - 访问linux虚拟内存

linux - makefile 可以更新调用环境吗?

sql - Postgres 不允许 localhost 但可以使用 127.0.0.1

c++ - 从一个 std::ostringstream 重定向到另一个 std::ostringstream

c++ - typedef 一个专门的嵌套模板

c++ - 编写 SQLite 管理器类 : viable approach?

Linux:通过 ssh 连接自动传输 sftp 文件

ruby - jRuby 和 Matz 的 Ruby 在同一台机器上?

c++ - `cin` 会自动产生换行符吗?

c++ - 我的 C++ 目标文件太大