Neblokovane cteni ze STDIN - vyreseno
Vlasta Šeliga
xseliga na fi.muni.cz
Sobota Květen 17 22:58:02 MEST 2003
No, jak je mym zvykem deset minut po zadosti o pomoc to vyresim sam ;-).
Takze reseni pres fcntl se ukazalo jako scestne, pouzil jsem select(), a
posleze jsem si precetl manual ;-). Kdyby to potreboval nekdo stejne
zeleny jako ja, tak tady:
#!/usr/bin/perl
use Fcntl;
use IO::Handle;
$Data::Dumper::Terse = 1;
$stdin = new IO::Handle;
$stdout = new IO::Handle;
$stdin->fdopen(fileno(STDIN),"r");
$stdout->fdopen(fileno(STDOUT),"w");
$BSD = -f '/vmunix';
if ($BSD) {
system "stty cbreak /dev/tty 2>&1";
}
else {
system "stty", '-icanon',
system "stty", 'eol', "\001";
}
for($i=0;$i<80;$i++){$stdout->print("\n");}
$stdin->blocking(undef);
do{
$key = $stdin->getline();
sleep 1;
}until $key eq "q";
if ($BSD) {
system "stty -cbreak /dev/tty 2>&1";
}
else {
system "stty", 'icanon';
system "stty", 'eol', '^@'; # ascii null
}
$stdin->close();
$stdout->close();
print "\n";
Další informace o konferenci Perl