为什么即使删除了文件,写入文件的程序仍可以继续运行而没有任何错误

问题描述

我正在使用Linux一段时间,今天我发现了一件有趣的事情。

我有一个无限程序,该程序不断将字符串写入文件中。

如果在运行程序时删除文件,我认为程序会产生一些错误。令我惊讶的是,什么也没发生...

这是我使用c ++ 11创建ininite程序的方式:

   this.$apollo.queries.cartProducts.refetch()

因此,在运行它之后,我得到了一个文件int main() { std::ofstream outputFile("./target"); int i = 0; while (true) { outputFile << i << endl; i++; std::this_thread::sleep_for(chrono::milliseconds(1000)); } return 0; } 。如果删除文件target),将不会产生错误

我的问题是:

  1. 为什么不生成任何错误
  2. 如果文件删除,这些字符串写在哪里?
  3. 是否可以在不重新启动无限程序的情况下重新创建要写入的新文件

解决方法

回答1&2:当您认为已删除文件时,实际上所做的就是删除了指向文件的“链接”。由于您的程序已经在运行,因此该文件实际上是打开的。该文件仍然存在,并且可以访问该文件并从中读取。因此,没有错误消息,因为您仍在写入文件。