收录日期:2018/06/20 09:27:50 时间:2016/05/20 23:30:05 标签:工具平台和程序库
我在记日志的一个程序, 日志文件以append方式打开. 在程序的运行过程中, 如果把日志
文件删除, 那么写的过程居然不出错, 真是奇怪. 测试代码如下:
//filewrite.cpp
#include <iostream>
#include <fstream>
#include <unistd.h> // for sleep
using namespace std;
int main() {
    ofstream file("test.txt", ios::out|ios::app);
    while(1) {
        file << "something" << endl;
        cout << "file state=" << file.rdstate() << endl;
        sleep(5);
    }
}
以append方式应该不会出错吧。
当然不会出错,如果是append的话,要检测文件是否存在,如果不存在就先建立一个新的再append。
我觉得
在程序处理过程中,该文件的内容已经读取到内存中了,已经不依赖源文件,所以你就算删除的原文件,不会影响到程序的处理。等程序处理玩了,就覆盖源文件的内容,不管源文件存在不存在了。
不懂楼上

《unix环境高级程序设计》里面说,删除一个文件的时候,先要检查是否有进程打开了这个文件,如果有,在关闭文件的时候在unlink。

按楼上说得:如果是多进程同时往这个日志文件里面写,显然就会有问题:
假设文件内容为"1"
进程1读文件,读到"1"
进程2读文件,读到"1"
进程1写文件,在文件尾部写"2",然后保存,文件内容变成了"12"
进程2也写文件,在文件尾部写"3",保存,这样保存的内容就是"13"了

不知道我的想法对不对
同意jyfcsdn的说法.
读写锁的问题吧!