当前位置: 技术问答>linux和unix
打印到控制台与重定向到文件的内容不同
来源: 互联网 发布时间:2016-12-25
本文导语: 现在我有一个可执行程序,我现在看不到它的实现。但是有一个这样的问题, 1、当我们执行这个程序,直接输出到控制台是这样的结果 dev: md4 name: raid_n02 type: raid5 size: 524,287MB status: CLEAN group: FREE dev: md3 name: r...
现在我有一个可执行程序,我现在看不到它的实现。但是有一个这样的问题,
1、当我们执行这个程序,直接输出到控制台是这样的结果
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
status: CLEAN
group: FREE
dev: md3
name: raid_no1
type: raid5
size: 524,287MB
status: CLEAN
group: FREE
Total Raid in system: 2
2、当我们重定向到文件时,文件的内容是
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
status: RESYNC progress=67.3% finish=9.9min
group: FREE
dev: md3
name: raid_no1
type: raid5
size: 524,287MB
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
status: RESYNC progress=67.3% finish=9.9min
group: FREE
dev: md3
name: raid_no1
type: raid5
size: 524,287MB
status: CLEAN
group: FREE
Total Raid in system: 2
每一次结果都会重复,而且有时结果会重复多次。
我自己的猜测是别人的程序可能创建了进程。
请大家帮我分析一下,别人实现这个可执行档,因为什么原因造成这个结果啊?
1、当我们执行这个程序,直接输出到控制台是这样的结果
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
status: CLEAN
group: FREE
dev: md3
name: raid_no1
type: raid5
size: 524,287MB
status: CLEAN
group: FREE
Total Raid in system: 2
2、当我们重定向到文件时,文件的内容是
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
status: RESYNC progress=67.3% finish=9.9min
group: FREE
dev: md3
name: raid_no1
type: raid5
size: 524,287MB
dev: md4
name: raid_n02
type: raid5
size: 524,287MB
status: RESYNC progress=67.3% finish=9.9min
group: FREE
dev: md3
name: raid_no1
type: raid5
size: 524,287MB
status: CLEAN
group: FREE
Total Raid in system: 2
每一次结果都会重复,而且有时结果会重复多次。
我自己的猜测是别人的程序可能创建了进程。
请大家帮我分析一下,别人实现这个可执行档,因为什么原因造成这个结果啊?
|
楼主的猜测是有可能的,我以前也碰到过。
直接打印到控制台的时候是行缓冲,不会放到缓冲页。
定向到文件的时候是页缓冲,页满才会刷新。
fork之前标准输出的缓冲没刷新,fork之后子进程继承了这段缓冲,结果每个缓冲都打印出来了。
纯属个人意见,呵呵,见笑
直接打印到控制台的时候是行缓冲,不会放到缓冲页。
定向到文件的时候是页缓冲,页满才会刷新。
fork之前标准输出的缓冲没刷新,fork之后子进程继承了这段缓冲,结果每个缓冲都打印出来了。
纯属个人意见,呵呵,见笑
|
按道理应该是重定向到文件时才会有些打印会丢失(在stdout有缓冲情况下)
这个结果很奇怪.
这个结果很奇怪.