收录日期:2018/10/22 22:41:32 时间: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的说法.
读写锁的问题吧!

请教:BuildExplicitAccessWithName 函数用法 flex datagrid如何改变行的字体颜色? 还得麻烦大虾们,关于MediaPlayer怎么托拽到asp.net的页面上 怎么才能写出好代码 还得麻烦大虾们,关于MediaPlayer怎么托拽到asp.net的页面上 请大侠帮忙看看这段代码,是关于VS2005 插件的!救命啊! 情人节送老公什么好 向路过的臭流氓掷臭鸟蛋 Linux超级用户密码问题 如果将一个由数几百个窗体的BCB项目的源文件分别封装到几个包中? 100分帮忙解决一个双缓冲闪烁的简单问题 求助:vb.net代码生成pdf格式文件。 一个让我头疼的问题 如果将一个由数几百个窗体的BCB项目的源文件分别封装到几个包中? 求activex的代码 jsp页面问题 阻塞和非阻塞模式的转换问题 如何将一个由数几百个窗体的BCB项目的源文件分别封装到几个包中? 请教:BuildExplicitAccessWithName函数 一段简单正则,请帮忙 php include 与 css路径 弹出对话框为什么没有显示? Enumaration 的问题 JRTPLIB传送h.264视频 请教:BuildExplicitAccessWithName 函数用法(不对专家) vs2005刚刚装好,新建了一个window程序,但是打不开窗体设计器 水晶报表的数据源问题??? Flex电子书 请问怎样有效的同时对一个软件项目的两个版本进行开发和维护???? 什么是句柄,终端句柄 interrupt handler