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

std system is run after going to next line c++

本文关键字:一行 c++ 运行 之后 系统 std      更新时间:2023-10-16

这里是我的一段代码:

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();
  }
}

我想知道上面的代码是否首先运行系统命令并完全填充"espresso.out"文件,然后转到下一行阅读。如果没有,我如何才能确保文件是完全打印之前去阅读它。

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

感谢您的及时答复我想通过以下方式更新我的问题:-这也是一种线程安全的方法吗?

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

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

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

是的,命令将在std::system调用返回之前完全完成。