perl中如何使缓冲区自动刷新
回复 #3 xdwjack 的帖子
|
$|这个变量是和对应的文件句柄挂钩的 默认对STDOUT操作 你如果想操作其他文件句柄就要先select,写的tricky一点,比如你想设置$filehadler这一文件句柄的auto flush则 |
$|将对当前select的FILEHANDLE起作用,默认是STDOUT。
使用方法如下:
$old = select FILEHANDLE;
$| = 1; #autoflush
select $old;
对某些对象,还可以直接使用autoflush方法,方法如下:
use IO::Socket;
$socket = IO::Socket::INET->new(...);
$socket->autoflush(1); #但经过测试,似乎不起作用,不清楚为什么
附:不起作用的原因是使用了类似 $message = <$socket>这样的用法,使用<>应该会等有回车才会返回,导致程序会停在这个语句上。如果使用$socket->recv($message, 1000)则没有问题。
使用方法如下:
$old = select FILEHANDLE;
$| = 1; #autoflush
select $old;
对某些对象,还可以直接使用autoflush方法,方法如下:
use IO::Socket;
$socket = IO::Socket::INET->new(...);
$socket->autoflush(1); #但经过测试,似乎不起作用,不清楚为什么
附:不起作用的原因是使用了类似 $message = <$socket>这样的用法,使用<>应该会等有回车才会返回,导致程序会停在这个语句上。如果使用$socket->recv($message, 1000)则没有问题。
本文介绍了Perl中如何实现缓冲区的自动刷新。通过设置特殊变量$|可以改变STDOUT的默认行为,并提供了对其他文件句柄设置自动刷新的方法。此外,还讨论了针对特定对象如IO::Socket使用autoflush方法的有效途径。
32

被折叠的 条评论
为什么被折叠?



