Prozesse und der Datenaustausch.

22/08/2008 - 23:11 von Sven Mönnich | Report spam
Hallo NG,

Ich habe da gleich mal ne Frage.

Aber vorweg erstmal worum es geht.
Ich habe mir einen USB-Barcodescanner zugelegt und möchte damit nun ein
bisschen spass haben. Ich habe mir ein Script gebastelt welches den
gescannten code in eine Datei schreibt. Im grunde so:

############### Anfang
my $fh = Linux::USBKeyboard->open($vendor_id, $product_id) or die "Can't
connect to Scanner: $!";
$fh->blocking(0);
my $io = IO::Select->new([$fh]);

while (1) {
if ($io->can_read(1)) {
my $code = <$fh>;
if ($code =~ /\x0A/) {
getCode($tmp);
undef $tmp;
} else {
$tmp=$tmp.$code;
}

}

}

############### Ende

getCode() ist für das dateischreiben.
Wie man vllt sieht hab ich nicht die große Ahnung vom Programmieren und
hier und da könnte oder sollte vllt auch was besser/anders gemacht
werden. Ich bin jedenfalls für Hinweise dankbar, aber Vorsicht ich bin
begriffsstutziger Anfànger ;)
So weit so gut.

Nun möchte ich das per fork in einem eigenen Prozess laufen lassen, der
Hauptprozess soll ein qt3 script sein was die Anzeige und Verarbeitung
der gescannten Codes übernimmt.

Nun stell ich mir die Frage wie bekomme ich den Code von einem Prozess
zum anderen übermittelt ?
Ich hab an IPC gedacht, hab davon aber überhaupt keine Ahnung.
Eine Vorstellung von mir war:
Wenn ein Code gescannt wurde öffne ich einen socket schreibe den Code
rein sende ein Signal an den anderen Prozess, der daraufhin die Daten
aus dem socket liest und sie dann verarbeiten kann.

Geht sicher geschickter aber wie?, und selbst bei meiner Idee stell ich
mir die Frage, wie sende ich ein Signal an den Prozess und Wie bekomme
ich den Prozess dazu funktion xy auszuführen wenn das Signal kommt.
Es gibt ja zum Thema IPC einiges zu lesen, nur zum verstehen reichen
meine fàhigkeiten nicht aus.
Ein ganz simples Beispiel tàte not.
Es würde mich unheimlich glücklich machen wenn irgend jemand da mal ein
Beispiel Posten könnte, oder einen Link zu einem einfachen ganz simplen
beispiel.

Vielen dank und noch ein schönes Wochenende

-Sven-
 

Lesen sie die antworten

#1 Peter J. Holzer
24/08/2008 - 13:55 | Warnen spam
On 2008-08-22 21:11, Sven Mönnich wrote:
Aber vorweg erstmal worum es geht.
Ich habe mir einen USB-Barcodescanner zugelegt und möchte damit nun ein
bisschen spass haben. Ich habe mir ein Script gebastelt welches den
gescannten code in eine Datei schreibt. Im grunde so:


[...]
Nun möchte ich das per fork in einem eigenen Prozess laufen lassen, der
Hauptprozess soll ein qt3 script sein was die Anzeige und Verarbeitung
der gescannten Codes übernimmt.

Nun stell ich mir die Frage wie bekomme ich den Code von einem Prozess
zum anderen übermittelt ?
Ich hab an IPC gedacht, hab davon aber überhaupt keine Ahnung.
Eine Vorstellung von mir war:
Wenn ein Code gescannt wurde öffne ich einen socket schreibe den Code
rein sende ein Signal an den anderen Prozess, der daraufhin die Daten
aus dem socket liest und sie dann verarbeiten kann.



Wenn Du IPC und Signale im gleichen Satz verwendest, dann bist Du mit
99% Wahrscheinlichkeit auf der falschen Schiene unterwegs.

Sockets (oder in dem Fall, da es sich um verwandte Prozesse handelt -
Pipes) sind der richtige Mechanismus. Qt stellt vermutlich einen
Mechanismus zur Verfügung, mit dem Du ihm sagen kannst: Ruf diese
Funktion auf, wenn auf diesem Filehandle I/O möglich ist.
Das ist dann wahrscheinlich die Methode, die Du in einem Qt-Programm
verwenden solltest. Oder vielleicht musst Du gar nichts spezielles in
Deinem Programm machen - nachdem der Barcodescanner offensichtlich ein
Keyboard ist, behandelt X11/Qt die Eingaben vielleicht eh automatisch?

Falls Qt das nicht kann, kannst Du den Filedescriptor selber regelmàßig
abfragen, entweder mit select (bzw. IO::Select) oder indem Du den
Filesdescriptor auf non-blocking setzt und einfach versuchst davon zu
lesen.

hp

Ähnliche fragen