我通过以下格式在我的C ++代码中通过system()
调用运行解压缩:
/usr/bin/unzip -o -q /<my_path_to_zip_file>/cfg_T-KTMAKUCB.zip -d /<my_path_to_dest>/../
这几乎有90%的时间成功。我无法理解什么会导致它失去时间与-1返回代码失败。有什么想法吗?
答案 0 :(得分:8)
根据我当地的man system
,
错误时返回的值为-1(例如fork(2)失败),否则返回命令的返回状态。
而POSIX spec说,
如果无法创建子进程,或者无法获取命令语言解释器的终止状态,则system()应返回-1并设置errno以指示错误
最后,unzip
的联机帮助页列出了各种返回码,但-1不在其中。
如果命令本身不能返回-1,则问题可能是初始fork
/ exec
,因为类似于系统范围或每用户限制(内存耗尽;进程表已满;最大进程,打开文件或用户等的VM大小限制等。)
当errno
失败时,你应该检查system
。在strace -f
下运行整个事情也会显示会发生什么。