多进程打开同一个文件导致文件操作失败

multiprocess open a same file cause file operation failed

在运行过程中,我使用了vim aa.txt和exec :wq,然后这个过程就不能再打印了。为什么?

当我通过lsof -p pid检查进程状态时,它显示/home/ben/bypy/sederror/aa.txt~ (deleted) 。顺便说一句,在centos中测试。

//test.cc
#include <iostream>
#include <fstream>
#include <unistd.h>

using namespace std;

int main()
{
    ofstream file("./aa.txt");
    if(!file.is_open())
    {
        return -1;
    }

    int iNum = 1;

    while(1)
    {
        file << iNum <<endl;
        iNum++;
        sleep(5);
    }

    return 0;
}

当您在 Linux 上打开文件时,它由设备和 inode 标识,只要有任何引用它就不会重复使用。如果您删除该文件并创建一个同名的新文件,则任何已经打开该文件的进程仍将引用现在已删除的旧文件,而不是新文件。当您使用 vi 编辑文件时,它不会就地覆盖它们;它确实删除了旧的并制作了一个新的。