Thread unverständnis zu sprintf (22 answers)
Opened by also at 2010-08-13 21:19

topeg
 2010-08-14 16:48
#140686 #140686
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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)

View full thread unverständnis zu sprintf