我的c ++项目中有这段代码:
std::string run_command = "build/executable input.txt";
std::string copy_command = "cp output.txt output_1.txt;";
int status1= system(run_command.c_str());
int status2=system(copy_command.c_str());
它完全在我的电脑上运行,但在我的笔记本电脑中不起作用。两个系统调用都返回-1,这意味着shell进程创建存在问题。您认为这是什么问题?
答案 0 :(得分:0)
据manual报道:
错误时返回的值为-1(例如,fork(2)失败),并且 否则返回命令的状态。后者的返回状态是 以wait(2)中指定的格式。因此,命令的退出代码 将是WEXITSTATUS(状态)。如果无法执行/ bin / sh, 退出状态将是退出(127)的命令。
所以,路径应该是正确的。尝试在脚本中添加一些打印调试 也许您指的是笔记本电脑中不存在的资源或库。
答案 1 :(得分:0)
尝试使用ptrace并打印errno(http://man7.org/linux/man-pages/man3/errno.3.html)来查找系统调用失败的原因。这是引导您解决系统调用失败原因的另一个资源http://bytes.com/topic/c/answers/217348-get-system-error-message
P.S。 我对编写c ++系统程序并不完全有信心,但我在C中构建一个shell并且打印errno帮助。我绝对建议使用ptrace以及监视操作系统是否有足够的资源来分配新进程。