Thread unverständnis zu sprintf
(22 answers)
Opened by also at 2010-08-13 21:19
Interessant. Wie Liest du den aus diesem Tastaturpuffer? Über so ein Problem bin ich noch nicht gestolpert. Ich weiß nicht was du genau machst. Ein System kann mehrerer Taststurpuffer haben, angefangen von der Konsole über den Gerätetreiber zum Gerät selber. Wo genau greifst du ein?
Mal zwei Beispiele: Tatstatur Eingaben von der Konsole: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #!/usr/bin/perl use strict; use warnings; use Term::ReadKey; ReadMode('cbreak'); while(1) { my @chars=read_all(); print join(' ',@chars)."\n" if(@chars); sleep(1); print localtime()."\n"; } sub read_all { my @ret; while(defined(my $char=ReadKey(-1))) { push(@ret,sprintf('%02X',unpack('C',$char))); } return @ret; } Linux Events für ein Device lesen: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 #!/usr/bin/perl use strict; use warnings; use Data::Dumper; # input devide # bei mir ist die Tastatur "/dev/input/event1" my $input=shift(@ARGV) || "/dev/input/event1"; # die länge von time ist # auf einem 64BitOS 8 Byte lang, # auf einem 32BitOS 4 Byte lang! my $time_lenth=(`uname -m`=~/_64/)?8:4; # heraus finden welche läng es ist! open(my $fh, '<', $input) or die("ERROR open $input ($!)\n"); binmode($fh); while(1) { eval{ local $SIG{ALRM}=sub{die}; while(1) { my $buffer; # Ein Event einlesen alarm(1); read($fh,$buffer,$time_lenth+4+2+2+4); alarm(0); if(defined($buffer)) { # Ein event setzt sich aus # time, utime, eventtype eventcode und eventvalue zusammen. my ($time,$utime,$type,$code,$value)=unpack(($time_lenth==4?'L':'Q').'LSSl',$buffer); print localtime($time).", $utime ==> $type,$code,$value\n"; } } }; sleep(1); print localtime()."\n"; } close($fh); Last edited: 2010-08-14 20:42:26 +0200 (CEST) |