为什么一个写入文件的程序即使文件已被删除,也能在没有任何错误的情况下继续运行



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

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

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

以下是我如何用c++11:创建ininite程序

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。如果我删除此文件(rm ./target(,将不会生成任何错误。

我的问题是:

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

对1&2:当你认为你已经删除了文件时,你实际上所做的就是删除了"链接";到文件。由于您的程序已经在运行,因此该文件实际上是打开的。文件仍然在那里,如果你有权访问它,就可以写入和读取。因此,没有错误消息,因为你仍在写入文件。

最新更新