std系统在转到下一行c ++后运行

时间:2016-05-17 10:55:20

标签: c++

这是我的代码:

void Espresso::run()
{
  std::system("/home/espresso-ab-1.0/src/espresso espresso.in > espresso.out");
  std::string line;
  std::ifstream myfile ("espresso.out");
  if (myfile.is_open())
  {
    while ( getline (myfile,line) )
    {
      std::cout << line << '\n';
    }
    myfile.close();
  }
}

我想知道上面的代码是否首先运行系统命令并完全填写&#34; espresso.out&#34;文件,然后转到下一行阅读它。 如果没有,我怎样才能确保文件在阅读之前完全打印出来。

注意:我被限制使用C ++ 03。

感谢您的快速回答。我想通过以下方式更新我的问题: - 它也是一种线程安全的方法吗?

2 个答案:

答案 0 :(得分:3)

std::system不是异步函数。例如,如果您运行:

std::system("sleep 5");
std::cout << "Foo" << std::endl;

“Foo”将在5秒后显示。 当然,如果您使用的是Linux,则可以像std::system("sleep 5 &")一样运行它。然后sleep命令将作为后台进程运行,系统调用后的代码将立即执行。 虽然我鼓励你不要使用这个功能。按名称调用系统函数很危险。想象一下,如果有人用自己的程序替换系统中的睡眠二进制文件会发生什么。结论:您的程序将挂起,直到系统命令完成。所以你的文件就准备好了。

答案 1 :(得分:2)

Yes, the command will be fully completed before the std::system call returns.