C++文件流问题

jinhuaxing 2003-08-21 12:14:33
我在记日志的一个程序, 日志文件以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);
}
}
...全文
54 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
nsly 2003-08-22
  • 打赏
  • 举报
回复
读写锁的问题吧!
meshwork 2003-08-21
  • 打赏
  • 举报
回复
同意jyfcsdn的说法.
ShiChao 2003-08-21
  • 打赏
  • 举报
回复
不懂楼上

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

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

不知道我的想法对不对
jyfcsdn 2003-08-21
  • 打赏
  • 举报
回复
我觉得
在程序处理过程中,该文件的内容已经读取到内存中了,已经不依赖源文件,所以你就算删除的原文件,不会影响到程序的处理。等程序处理玩了,就覆盖源文件的内容,不管源文件存在不存在了。
同桌老王 2003-08-21
  • 打赏
  • 举报
回复
当然不会出错,如果是append的话,要检测文件是否存在,如果不存在就先建立一个新的再append。
zhang,qiuping 2003-08-21
  • 打赏
  • 举报
回复
以append方式应该不会出错吧。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧