在我的场景中,什么可能导致解压缩命令返回 -1

What could cause unzip command returning -1 in my scenario?

本文关键字:解压缩 命令 返回 我的 什么      更新时间:2023-10-16

我通过system()调用在我的C++代码中以以下格式运行解压缩:

/usr/bin/unzip -o -q /<my_path_to_zip_file>/cfg_T-KTMAKUCB.zip -d /<my_path_to_dest>/../

这将几乎90%的成功。我不明白是什么让它不时地失败 -1 返回代码。有什么想法吗?

根据我当地的man system

返回的值在错误时为 -1(例如 fork(2( 失败(,否则命令的返回状态。

POSIX规范说,

如果无法创建子进程,或者无法获取命令语言解释器的终止状态,system(( 应返回 -1 并设置 errno 以指示错误

最后,unzip的手册页列出了各种返回代码,但 -1 不在其中。

如果命令本身无法返回 -1,则问题可能出在初始 fork/exec 上,由于系统范围或每用户限制(内存耗尽;进程表已满;最大进程数、打开的文件或用户的 VM 大小限制等(。

无论如何,您应该在system失败时检查errno。在strace -f下运行整个事情也会显示会发生什么。