什么可能导致unzip命令在我的场景中返回-1?

Gri*_*fin 3 c++ linux unzip

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

/usr/bin/unzip -o -q /<my_path_to_zip_file>/cfg_T-KTMAKUCB.zip -d /<my_path_to_dest>/../
Run Code Online (Sandbox Code Playgroud)

这几乎有90%的时间会成功.我无法理解什么会导致它失去时间与-1返回代码失败.有任何想法吗?

Use*_*ess 8

据我当地人说man system,

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

POSIX规范说,

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

最后,manpage用于unzip列出各种返回码,但-1不在其中.

如果命令本身不能返回-1,则问题可能是初始fork/ exec,因为类似于系统范围或每用户限制(内存耗尽;进程表已满;最大进程,打开文件或VM大小限制)为用户等等).

你应该在errno什么时候system失败时检查.运行整个事情strace -f也将显示会发生什么.