gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:47:34 26 4
gpt4 key购买 nike

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

当我通过lsof -p pid检查进程状态时,它显示/home/ben/bypy/sederror/aa.txt~(已删除)。顺便说一句,在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 编辑文件时,它不会就地覆盖它们;而是将其覆盖。它确实删除了旧的并创建了一个新的。

关于c++ - 多进程打开同一个文件导致文件操作失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67223637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com