免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sumland
打印 上一主题 下一主题

多进程文件操作 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-06-28 09:46 |只看该作者
大致理解楼主的意思了。
其实你要做的就是“进程安全的写指定的文件,同时,这个文件句柄同一时刻只有唯一的一个。

你需要了解的知识如下:
1、如何创建子进程,以及如何指定子进程的行为。
2、如何使用fcntl这个函数实现进程安全的文件读写。

上述知识你弄明白了,这个问题就解决了。

good luck

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
22 [报告]
发表于 2011-06-28 10:12 |只看该作者
回复 20# sumland


    动手,调试,分析代码和执行结果,程序员就是要这么悲催的。。。自己试过思考过,即使不明白,别人再给你说也会理解的深刻,如果自己不动手只听别人说,感受很浅的

论坛徽章:
0
23 [报告]
发表于 2011-06-28 12:27 |只看该作者
回复 22# cokeboL


    大侠,你的那个例子,应该是每次fork后,父进程都exit了,只执行子进程,打印child吧!

论坛徽章:
0
24 [报告]
发表于 2011-06-28 12:28 |只看该作者
回复 22# cokeboL


    大侠,你给的例子是每次执行fork后,父进程都exit了,只有子进程一直在打印child。你想告诉我什么呢?

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
25 [报告]
发表于 2011-06-29 13:48 |只看该作者
回复 24# sumland


    子进程继承了哪些代码?循环中fork子进程继承的情况怎样?你的代码中相似之处?然后就能找到为什么多个进程同时创建新文件的答案了吧。。

论坛徽章:
0
26 [报告]
发表于 2011-06-29 16:37 |只看该作者
回复 25# cokeboL


    不错,我隐约约约认识到,while循环里面,每fork一次,就相当于多执行一次父进程的代码,而这些子进程都是独立的,即文件指针,句柄之类的东西,都应该是在不同的地址空间被操作。

论坛徽章:
0
27 [报告]
发表于 2011-06-30 01:43 |只看该作者
对fork不了解吧!

while(1)

{        

        

...//略去        

pid_t pid;

  pid=fork();

  if(pid<0) // 错误

        {

        close(nConnectSocket);

        continue;

        }

  if(pid>0) // 父进程

        {

               get_fp(&NowFp,str);

               close(nConnectSocket);   

               continue;      

   

        }
      // 子进程执行
      close(nListenSocket);

      break;                     

}
.....

重点问题在于父进程fork完后没有退出,而是执行get_fp(),返回后继续fork()。子进程倒什么也没做。如果按这个逻辑结构,fork完全没有意义。

fork()会从父进程获得什么,最好多了解一点。系统架构相当重要。
fork开销会很大的,除非必须,不然都用pthread_create代替的。
还有,代码完全没有考虑效率。fork()之后的判断是没有考虑效率的典型。

整个代码,基本等于将一个for循环,艰难的弄成了一个fork,造出了一堆bug

论坛徽章:
2
数据库技术版块每日发帖之星
日期:2015-12-21 06:20:00平安夜徽章
日期:2015-12-26 00:06:30
28 [报告]
发表于 2011-07-01 15:36 |只看该作者
楼主们讨论的东西好专业啊,看不懂
嘿嘿,不过楼主们如果想找软件开发类的工作可以联系我哦。QQ:1732153787

论坛徽章:
0
29 [报告]
发表于 2011-07-15 08:57 |只看该作者
回复 1# sumland


    如何确保多进程下 fclose一个文件呢?

论坛徽章:
0
30 [报告]
发表于 2011-07-15 11:38 |只看该作者
回复 7# sumland


    hello~请问可以留一个QQ号吗?有些问题想请教
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP