免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2573 | 回复: 6
打印 上一主题 下一主题

删除一个正在读写的文件的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-02 15:27 |只看该作者 |倒序浏览
一个删除打开的文件的例子。用文件在不同进程之间通信的方法。

也回答了帖子:

〈SOS!并行进程中,一个进行删除动作,一个进行读取动作,如何避免可能出现的〉

这帖子的跟贴中有些人的观点不对。

delete 一个打开的文件(正被读写), 之间无竞争关系,是inode的counter问题。没有到0,unlink就没有最后DELETE。




  1. #include <stdio.h>

  2. main()
  3. {
  4. FILE *fp;
  5. int i;
  6.     fp = fopen("1111", "w+");
  7.     if(!fp) return 0;

  8.     if(unlink("1111")) printf("error delete file.\n");

  9.     i = fwrite("12345678", 1, 9, fp);
  10.     printf("write %d bytes\n", i);

  11.     if(0 == fork()) {
  12.         char buf[128];
  13.         memset(buf, 0, 128);
  14.         fseek(fp, 0, 0);
  15.         i = fread(buf, 1, 128, fp);
  16.         printf("child read %d %s\n", i, buf);

  17.         exit(0);
  18.     }
  19.     fclose(fp);
  20. }

复制代码

[ 本帖最后由 思一克 于 2006-8-2 15:32 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-02 15:30 |只看该作者
我用
复制代码
了,为什么还有鬼怪符号?

论坛徽章:
0
3 [报告]
发表于 2006-08-02 15:36 |只看该作者
原帖由 思一克 于 2006-8-2 15:30 发表
我用
复制代码
了,为什么还有鬼怪符号?


因为没有把代码放在里面

论坛徽章:
0
4 [报告]
发表于 2006-08-02 15:37 |只看该作者
我自己改了。谢谢

论坛徽章:
0
5 [报告]
发表于 2006-08-02 16:30 |只看该作者
那个人的意思不是打开以后删除,
是在找到了以后尚未打开的时候被另外的进程删了

论坛徽章:
0
6 [报告]
发表于 2006-08-02 16:39 |只看该作者
如果是“找到了以后尚未打开的时候被另外的进程删了”,那从程序的角度就一点冲突也没有了。

你打开已经删了的文件读会失败。那流程就是该怎么办就怎么办。

论坛徽章:
0
7 [报告]
发表于 2006-08-02 22:19 |只看该作者
多谢楼主的关心,我的问题解决了.但并不是你说的"那流程就是该怎么办就怎么办。",因为做为服务器追求的就是稳定.我使用的是共享内存.建一变量,以1为界限,等于0时允许删除,否则不能删除;大于等于1时,开始扫描之前加1,开始读数据时就减1.
     虽然并不知道版主是什么东东,有什么好处,刚开始贴帖生涯的我还是祝贺你.前辈.
     有空再去看的新贴.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP