免费注册 查看新帖 |

Chinaunix

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

提问:多进程读文件的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-28 12:54 |只看该作者 |倒序浏览
试写了一个小程序,作用是读出文件中每一行的字符串做MD5加密,想用多进程来做,目的是想加快做MD5的速度。不过调试的时候,发现只有子进程读出了文件中每一行字符串,父进程什么也没做。
1 不知道是什么原因?高手能不能给解释一下
2 有其他什么好的实现办法?
或者推荐些相关的文章让我看,谢谢了
fd=fopen("1.txt","rt");
pid=fork();
while(!feof(fd))
  {
     fgets(buf,SIZE,fd);
     if(pid==0)
       {
          printf("process in child\n");
          printf("string =%s\n",MD5(buf));
        } else if(pid>0)
            {
                printf("process in father\n");
                printf("string =%s\n",MD5(buf));
             }
  }

论坛徽章:
0
2 [报告]
发表于 2007-09-28 15:55 |只看该作者


  1. fd=fopen("1.txt","rt");
  2. pid=fork();
  3. if (pid == 0) {
  4.         while (!feof(fd)) {
  5.                 printf("process in child\n");
  6.                 printf("string =%s\n",MD5(buf));
  7.                 }
  8. } else if (pid > 0) {
  9.         while(!feof(fd)) {
  10.                 printf("process in father\n");
  11.                 printf("string =%s\n",MD5(buf));
  12.         }
  13. }
复制代码


子进程和父进程共享同一个文件表,因此能正确的得到当前文件的偏移量。
如果在负荷重的主机中测试的话,在父进程和子进程间会出现竞争现象。输出如:
process in child
process in father
(接着才是加密后的string)。

[ 本帖最后由 huayd 于 2007-9-28 15:57 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-09-28 16:00 |只看该作者
可能的原因是你要加密的文本太小,主机跑的快。
如果要演示效果,可以在子进程和父进程都加上一个sleep,让他们都在输出一段时间后让另一个干活。

论坛徽章:
0
4 [报告]
发表于 2007-09-28 16:31 |只看该作者
谢谢 我再调试一下
上面提到的1.txt中的字符串确实不是很多 可能是子进程加密速度太快 还没轮到父进程就结束了

还有一个问题就是:多进程读取文件中的字符串并加密,有没有加速效果?

论坛徽章:
0
5 [报告]
发表于 2007-09-28 16:35 |只看该作者
看实际情况而定,跟主机的环境负荷有关
这个问题等待高人回答

论坛徽章:
0
6 [报告]
发表于 2007-09-28 16:37 |只看该作者
呵呵,还要感谢楼上的几位

论坛徽章:
0
7 [报告]
发表于 2007-09-28 21:10 |只看该作者
可能子进程执行地太快,如果多CPU的话,可以提高速度,单CPU提高不了多少
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP