免费注册 查看新帖 |

Chinaunix

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

一个linux进程实验问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-10-24 10:39 |只看该作者
原帖由 duanjigang 于 2008-10-24 09:17 发表
你把结果重定向到文件中检查下
test_prog > result.txt

然后检查0-5000行,5000-10000行,10000-15000行是否有别的字符串



我又用了结果重定向到一个文件中观看的,还是有打断呢。第一个字符串完整连续的显示了5000行,第二个字符串与第三个字符串显示被打断,有了混合。
出现以下这种情况:

未命名.jpg (5.17 KB, 下载次数: 34)

未命名.jpg

论坛徽章:
0
12 [报告]
发表于 2008-10-24 11:01 |只看该作者
同问
是不是那个锁定进程的函数有问题

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
13 [报告]
发表于 2008-10-24 12:46 |只看该作者
呵呵,开始还以为你真的直接从终端屏幕捕捉了该现象!
原来经过重定向啊,那么一切都容易解释了: ... | proc或者 ... > file,标准输出重定向后变为全缓存,此时输出结果用术语说就是unspecified或undefined。文件锁切忌和stdio相关函数混合使用,尤其是输出为全缓存时,建议配合read或write使用。总之,文中lock(1,1,0)锁定标准输出确实成功了,但是由于全缓存的作用,最后部分出现交叉,如果没有重定向,标准输出默认是行缓存,结果不会交叉。

论坛徽章:
0
14 [报告]
发表于 2008-10-25 12:47 |只看该作者
原帖由 timespace 于 2008-10-24 12:46 发表
呵呵,开始还以为你真的直接从终端屏幕捕捉了该现象!
原来经过重定向啊,那么一切都容易解释了: ... | proc或者 ... > file,标准输出重定向后变为全缓存,此时输出结果用术语说就是unspecified或undefined。 ...


可是结果十分庞大,屏幕很快翻到最后一页,如何仔细看结果呢?

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
15 [报告]
发表于 2008-10-25 15:24 |只看该作者
原帖由 乌龙张 于 2008-10-25 12:47 发表


可是结果十分庞大,屏幕很快翻到最后一页,如何仔细看结果呢?


可以直接通过文件输出结果,文件缓存设置为行缓存,与标准输出效果一样,但看结果方便。

论坛徽章:
0
16 [报告]
发表于 2008-10-26 18:24 |只看该作者
原帖由 timespace 于 2008-10-25 15:24 发表


可以直接通过文件输出结果,文件缓存设置为行缓存,与标准输出效果一样,但看结果方便。


我就是用的: ./a.out >result.txt,就是输出到文件呀,可是打开此文件看到结果还是有交叉。

论坛徽章:
0
17 [报告]
发表于 2008-10-26 20:41 |只看该作者
我在 2.4.20-8实验了, 没有问题啊

论坛徽章:
0
18 [报告]
发表于 2008-10-26 20:43 |只看该作者
原帖由 timespace 于 2008-10-25 15:24 发表


可以直接通过文件输出结果,文件缓存设置为行缓存,与标准输出效果一样,但看结果方便。


如何设置为行缓存呢?

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
19 [报告]
发表于 2008-10-26 21:11 |只看该作者
原帖由 乌龙张 于 2008-10-26 20:43 发表


如何设置为行缓存呢?


你改用标准错误吧,标准错误默认是非缓冲的  lock 1 => lock 2   printf( => fprintf(stderr,

论坛徽章:
0
20 [报告]
发表于 2008-10-27 23:17 |只看该作者
提几点自己的看法:
1、代码写的很不规范,fork函数一般都要判断 大于0 小于0 等于0三种情况,还有lockf也要做判断;
2、我测试了一下,child和son daughter谁先谁后都有可能的,但都会一直走完
3、可以考虑用freopen进行重定向
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP