当命令失败时,gzip 会在 C++ 中返回错误代码吗?
does gzip returns error code in c++ when command fails?
>背景: 在 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 要少得多。 (如果最终输出被压缩,则尤其如此。
但是,要回答您的问题:
-
在 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");
- 来自
gzip
的返回值告诉您命令是否成功。 见上文。
相关文章:
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- openCL-创建子缓冲区返回错误代码13
- 如何从构造函数返回错误代码?
- 如何使用 RAII 包装返回错误代码的 C 分配
- ChangeWindowMessageFilterEx() 返回错误代码 5
- mmdevice API中的cocreateinstance返回错误代码0x800401f0
- Ubuntu E:子进程 /usr/bin/dpkg 返回错误代码 (1)
- GetProcAddress 在 c++ 中返回错误代码 127
- C++错误处理-使用std::pair或std::tuple返回错误代码和函数返回的缺点
- Windows GDI API是否在GetLastError中返回错误代码
- ldap_search函数使用 C++ Win32 API 返回错误代码 10
- C++ WinSock Recv 在接收 0 数据时终止线程而不是返回错误代码
- 以双精度返回错误代码
- QMutexLocker 是否返回错误代码(如果有)
- SetPixelFormat 返回 0 错误代码 3221684230 (C0070006)
- sqlite3_prepare_v2返回错误1代码
- WriteFile返回错误代码995
- 创建进程为用户返回错误代码 2
- 项目 :错误 PRJ0019:工具从 "Performing Pre-Build Event..." 返回错误代码
- FindResourceW()返回错误代码127