当命令失败时,gzip 会在 C++ 中返回错误代码吗?

does gzip returns error code in c++ when command fails?

本文关键字:返回 错误代码 C++ 会在 失败 命令 gzip      更新时间:2023-10-16

>背景: 在 ubuntu18 env 中工作(如果重要的话(,我正在为我的数据处理程序伪造大量大的 *.csv 文件 pcap 格式。完成转换后,我正在运行"gzip -f"+ file_name然后检查它是否返回 !0,然后我知道它失败了。这是代码:

if (convert()) {
m_ofs.close();
string command = "gzip -f " + m_out_file_name;
if (system(command.c_str()) != 0) {
const string info{"Cannot execute 'gzip' command, please check if system has installed gzip"};
m_logger->printf("%sn",info.c_str());
}

但是,截至目前,当我的转换器完成时,我没有办法显示进度,而且我有一种感觉,有些人会在 gzip 命令完成之前停止转换器(我的意思是转换和 ip 每个文件需要整整一个小时(。无论如何要检查何时发生,以便我可以记录错误?例如:

if (convert()) {
m_ofs.close();
string command = "gzip -f " + m_out_file_name;
if (system(command.c_str()) != 0) {
/* EXAMPLE CODE */
if (errno == USER_PRESS_CTR_C){
m_logger->printf("Converter finished but user canceled compressionn");
}
/* EXAMPLE CODE */ 
const string info{"Cannot execute 'gzip' command, please check if system has installed gzip"};
m_logger->printf("%sn",info.c_str());
}

另一个词是system("gzip -f file");失败时是否返回任何有用的错误代码?

[编辑] 感谢大家的帮助,我最终安装和使用了 zlib LOL 快两年了,我简直不敢相信这就是我曾经问过的,真的谢谢你的帮助!

Google-fu 建议它在成功时返回 0,在失败时返回 1,在警告时返回 2。 为了获得更好的错误消息,请考虑调用提供更多信息的库。 此链接可能会引导您找到可行的选择。

你绝对应该使用 zlib 而不是掏出 gzip 命令,特别是如果你将立即读取解压缩的文件。您会发现动态处理解压缩的数据更快,因为它涉及的磁盘 I/O 要少得多。 (如果最终输出被压缩,则尤其如此。

但是,要回答您的问题:

  1. 在 Linux 上,system()的返回值指示命令是成功还是失败。返回值将为:

    • 如果system无法创建运行命令的进程,则为 -1。
    • 如果命令无法执行,则为 127(例如,因为命令可执行文件不存在(
    • 与命令正常
    • 终止(通过返回或调用exit(或由信号终止时来自wait的返回值相同。

因此,这很容易判断命令是否被中断:

int status = system(command);
if (status == 0)
fprintf(stderr, "%sn", "Command executed successfully");
else if (status == 127)
fprintf(stderr, "%sn", "Command could not be executed");
else if (WIFSIGNALLED(status) {
if (WSIGTERM(status) == SIGINT)
fprintf(stderr, "%sn", "Command terminated by interrupt (SIGINT)");
else
fprintf(stderr, "%sn", "Command terminated by signal %dn");
}
else
fprintf(stderr, "%sn", "Command terminated for unknown reason");
    来自
  1. gzip的返回值告诉您命令是否成功。 见上文。