【问题标题】:Check for error in command passed to popen API in cpp检查传递给 cpp 中的 popen API 的命令中的错误
【发布时间】:2018-06-06 04:58:46
【问题描述】:

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

  1. file_name.gz
  2. file_name.Z
  3. file_name.tar.gz

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

我想获取解压缩文件的 FILE 句柄。我为此使用 popen() API。现在,由于内存问题,可能会出现 gunzip/uncompress/tar 在解压文件时失败的情况。如何在我的 CPP 应用程序中捕获故障。有办法检查 popen 是否失败。传递给 popen() 的命令怎么样。

请帮忙。我试图在各个地方找到它,但无法得到满意的解决方案。

【问题讨论】:

    标签: c++ c popen compression


    【解决方案1】:

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

    【讨论】:

    • pclose() 也会关闭文件流。我如何在不关闭流的情况下检查它。如果一切顺利,我仍然会关闭流以检查是否有任何故障。
    • 继续从流中读取直到 EOF。然后调用 pclose。
    • 我按照建议使用了 pclose()。但是对于某些情况,我得到了 errno = ECHILD。你能建议这里有什么问题吗?
    • 这正是崩溃的迹象。见linux.die.net/man/3/pclose
    猜你喜欢
    • 2012-06-24
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 2017-09-02
    相关资源
    最近更新 更多