我用下面的格式在我的C ++代码中通过system()
调用来运行解压缩:
/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
下运行整个事情也将显示发生了什么。