首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

ofstream打开文件的冲突有关问题

2012-03-31 
ofstream打开文件的冲突问题ofstream fout2fout2.open(\\\\111\\111.txt , ios::app)fout2 输出111

ofstream打开文件的冲突问题
ofstream fout2;
fout2.open("\\\\111\\111.txt" , ios::app);
fout2 <<"输出111111"<<endl;
fout2.close();

主机这样打开文件,在未关闭文件时。
局域网另外一个同样的的程序以相同方式打开了该文件,另一个程序会打开错误或冲突么?
主机存储会造成冲突么?
什么情况下可能产生致命错误?
如何防止这种情况出现?

[解决办法]
主机这样打开文件,在未关闭文件时。
局域网另外一个同样的的程序以相同方式打开了该文件,另一个程序会打开错误或冲突么?
、、、这个不会打开错误,或冲突
主机也能正常存储,但是这个时候你说的冲突是什么?存储肯定会有问题(假如两台电脑都修改了文件内容的话)
致命错误就是应该没有吧
防止这种情况的方法就是,你在文件开始和结尾添加个校验位,比如校验位的值为1表示这个文件正被另外一个文件修改,此时不能进行修改。。。0时表示能修改
该思想还是不太成熟,希望对你有所帮助
[解决办法]
这种做法存在很大的冲突风险。
当两个程序都想那个文件写的时候,一般来说肯定会出现问题,比如其中一个程序可能会崩溃。总之这样做很危险。

解决此类,你不妨写一个服务器程序,由服务器来控制对该文件的读写权限(比如读锁、写锁等等),文件处理的程序仅和该服务器通讯,而不要直接访问文件。
[解决办法]
如果是win平台,用CreateFile不就得了,里面可以指定是共享读(其他程序也可以读他),共享写,还是完全不共享(不允许其他程序再使用这个文件)
[解决办法]
Windows平台下,以CreateFile API以独占方式打开文件。
如果一定要fopen的话,你可以使用内核对象来同步,比如事件对象,CreateEvent/SetEvent/ResetEvent()/CloseHandle();
[解决办法]
这样建议使用第三方鉴权,来给文件的使用者授予访问文件的权力
[解决办法]
办法太多了, 信号量, 共享的互斥锁, 文件锁都可以实现.

linux里创建文件使用O_CREAT|O_EXCL, 配合MODE设置S_IXUSR来表示创建者正在初始化,后来打开文件者stat判断MODE是否设置了S_IXUSR来确保初始化是完成的,创建者fchmod取消S_IXUSR来表示初始化完成。
(初始化指信号量,互斥锁,文件锁的创建)

不懂的话去找一本APUE读一下,这是完全可靠的办法。


[解决办法]
Windows下可以用_fsopen或者_sopen函数
[解决办法]
问题在于超过1个在写的时候,就可能出问题。
[解决办法]
CreateFile...

热点排行