为什么写入文件的程序可以保持 运行 而不会出现任何错误,即使文件已被删除

Why can a program, which writes to a file, keep running without any error even if the file has been deleted

我使用 Linux 有一段时间了,今天我发现了一个有趣的东西。

说我有一个无限程序,它一直在向文件中写入字符串。

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

以下是我如何使用 C++11 创建无限程序:

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 的答案:当你认为你已经删除了文件时,你实际上所做的是你已经删除了文件的“link”。由于您的程序已经 运行,文件实际上已打开。该文件仍然存在,如果您有权访问它,则可以对其进行写入和读取。因此,没有错误消息,因为您仍在写入文件。