C++ 检查在cpp中传递给popen API的命令中是否存在错误

C++ 检查在cpp中传递给popen API的命令中是否存在错误,c++,c,popen,compression,C++,C,Popen,Compression,有一个cpp应用程序,我想读取以下类型的压缩文件- 文件_name.gz 文件名.Z 文件_name.tar.gz 为此,我检查文件扩展名并相应地选择解压缩技术。例如,文件_name.gz将使用“gunzip-C file_name.gz”进行解压缩 我想获取解压缩文件的文件句柄。我使用popen()API来实现它。现在,可能存在这样一种情况:由于内存问题,gunzip/uncompress/tar在解压缩文件时失败。如何在我的CPP应用程序中捕获失败。有办法检查popen是否失败。传递给pop

有一个cpp应用程序,我想读取以下类型的压缩文件-

  • 文件_name.gz
  • 文件名.Z
  • 文件_name.tar.gz
  • 为此,我检查文件扩展名并相应地选择解压缩技术。例如,文件_name.gz将使用“gunzip-C file_name.gz”进行解压缩

    我想获取解压缩文件的文件句柄。我使用popen()API来实现它。现在,可能存在这样一种情况:由于内存问题,gunzip/uncompress/tar在解压缩文件时失败。如何在我的CPP应用程序中捕获失败。有办法检查popen是否失败。传递给popen()的命令如何


    请帮忙。我试图在不同的地方找到它,但没有得到满意的解决办法

    当进程正常终止时,它将向父进程返回退出代码0(合法地,
    exit_SUCCESS
    )。否则,在崩溃或任何其他异常终止的情况下,预计将返回非零值。您可以通过调用
    pclose()
    获取退出代码。如果代码为0,则子进程很可能已成功终止。

    pclose()也将关闭文件流。如何在不关闭流的情况下进行检查。如果一切顺利,我仍将关闭流以检查是否有任何故障。只需继续读取流,直到EOF。然后调用pclose。我按照建议使用了pclose()。但对于一些案例,我得到了errno=ECHILD。你能告诉我这里可能出了什么问题吗?那正是坠机的迹象。看见