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