收录日期:2019/01/20 03:04:57 时间: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的说法.
读写锁的问题吧!

关于struts数据库的问题,在线等,麻烦高手指点一下。 哪位可否解释一下邮件地址正则表达式[\\w\\.-]+(\\+[\\w-]*)?@([\\w-]+\\.)+[\\w-]+吗? 数据从sql server2000导入到oracle9i有什么好办法? 求sql pb的socket编程的问题 一款多功能全兼容万能枪 on error resume next 最为简单的:用DataSet与Xml问题,在线等待。 请问如何得到RichTextBox的滚动条。并控制使滚动到特定的位置 combobox的奇怪例子 求二张表之间图片问题,请高手进来看看...... 下个月结婚,高兴! THinWindow 在自画控件上的使用问题。 提问一下\"向下移\"怎么实现,在线等(关于adodc控件的),帮帮我! 如何使List box的右侧滚动条始终处于最低下,以便能显示List box的最后一项? SQL日期相减,根据得到的值来更新相应的字段 熟悉jspsmartupload的请进来 麻烦帮我找找asp在access数据库转为sqlserver时所需要注意的问题(偶实在是找不到,以前的收藏掉了) 请教一个关于HTMLView类的拖动问题 求助:8.0.5 物化视图 treeview控件的一个问题 怎样娶到盖茨女儿(ZT) 下个月结婚,高兴! Apache HTTP Server Version 2.0 用户认证.输入用户名密码失败(急问)!!!!! 高手帮忙,流量统计的问题. 关于cookies的变态问题 JAVA中,如何往现有xml文件中加入节点,请赐教,非常急 下个月结婚,高兴! 请问如何获得EXEC的返回结果 asp.net文件头的几个关键字?