open 需要放入while里才能记录输出????

open 需要放入while里才能记录输出????

close STDIN;
close STDOUT;
close STDERR;
open STDIN, 'a';
open STDOUT, '>>b';
open STDERR, '>c';
while(1){

   print "XXXXXXXXXXXXXXXXXXXX\n";
   sleep 5;
}



以上的代码 print打印输入不到 b这个文件中。必须要把open放入while循环中才可以。
这是为什么?
perldoc -f select
你的代码其实是可以的
只不过你写在死循环里面了,kernel会将输出buffer,你ctrl+c结束程序的时候这部分buffer的内容是不会写入文件b的
解决的方法有三个:
1.运行足够长的时间,比如1小时,肯定有东西,没东西你来找我
2.打开autoflash, 在代码前面加入$| =1; 这个我试过,是可以的
3. 自己写$SIG{'INT'},将buffer内容flush到文件中
4. 不要写死循环,让程序能够正常退出,这也是可以的


至于为什么放在循环里面就可以了,这个问题其实你发现没有,放循环里面的话
open STDOUT,'>b';
这个语句是在反复执行
由于用的文件描述符是同一个,都是STDOUT,所以在打开一个新的文件的时候,会将上一次的内容flush掉。



QUOTE:
原帖由 churchmice 于 2009-1-9 17:53 发表
你的代码其实是可以的
只不过你写在死循环里面了,kernel会将输出buffer,你ctrl+c结束程序的时候这部分buffer的内容是不会写入文件b的
解决的方法有三个:
1.运行足够长的时间,比如1小时,肯定有东西,没东 ...

确实会有输出。不过等1个小时太长了
强的,这个太高深了