收录日期:2019/06/26 10:31:17 时间: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的说法.
读写锁的问题吧!

各位朋友帮帮忙.socket的问题..谢谢................!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 今天被人教育了一把,求真相 显示bitmap 然后拉伸了下窗口就会出现这样的错误呢?希望高手指点! SQL 2000应用程序在 第一次 安装时的问题. 关于delphi很诡异的一个问题~ 夏天到了,如何防止一些坏人贴身 求帮忙啊 C++ 请教:什么情况下会使用无刷新分页? 五一怎么过? 初学sybase!求教 Incorrect syntax near错误!! Session问题 如何禁止外网访问公司系统 Could not execute JDBC batch update 有中文 【离洛】 如果非要选一个,你愿意做孙膑还是庞涓 求推荐一本oracle的入门书 在线等,高分求助C#的ShowDialog问题 欧美游戏与国内游戏的编写方式上有很大的区别? Foo a();和Foo a;有什么区别? 求VC下推箱子代码~ 时间函数问题,在线急等 布局中ListView不断响应onScroll事件问题 搜狐公司诚聘技术英才,海量职位等你来! [已处理]专家分问题 感谢 残留的回忆 KingStar-小5听了一下午了 vc socket粘包接收处理问题 TEST与CMP通常被用来比较哪些跳转指令呢? C语言文件操作某具体问题 保存点 求ext高手看看滚动条颜色怎么变呢