Hallo, ich habe zwei Programme in C geschrieben die nur auf Linux laufen sollen. Nun will ich wenn ich Programm 1 ein bestimmtes Ereignis eintritt dem Programm 2 dieses mitteilen. Programm 2 soll hierfür kurz aus dem gewohnten gerissen werden (Interrupt) und danach dort weiter machen, wo es war. Erste Frage: Nennt man das Event oder Singal oder ganz anders? Dazu habe ich Inter process communication gefunden. Sockets, SharedMemory usw. Nun würde ich Sockets verwenden um die beiden Programm ggf. auf unterschiedlichen Rechnern laufen lassen zu könne. Nun zu meinem Problem: Ich würde das gerne wie oben schon erwähnt über Events? Signale? lösen. Nach was suche ich hier? :) Würde mich sehr über ein paar Stichworte freuen, die ich googlen kann.
:
Verschoben durch User
Du könntest theoretisch ein Signal an den anderen Prozess senden, und in diesem einen signal handler registrieren, der darauf wartet. http://man7.org/linux/man-pages/man3/sigqueue.3.html http://man7.org/linux/man-pages/man2/sigaction.2.html Oder du machst es mit Sockets, die lösen aber nicht direkt Events oder Signale aus. Da musst du dann entweder in deinem Main Thread immer wieder das Socket abfragen (poll), oder einen eigenen Thread starten, der blockt bis Daten auf dem Socket ankommen und dann vom Kernel aufgeweckt wird (blocking sockets).
AKE schrieb: > Hallo, > > ich habe zwei Programme in C geschrieben die nur auf Linux laufen > sollen. Nun will ich wenn ich Programm 1 ein bestimmtes Ereignis > eintritt dem Programm 2 dieses mitteilen. Programm 2 soll hierfür kurz > aus dem gewohnten gerissen werden (Interrupt) und danach dort weiter > machen, wo es war. > > Erste Frage: Nennt man das Event oder Singal oder ganz anders? Antwort: Ja. ;-) Ausführlichere Antwort: Es gibt verschiedene Möglichkeiten. Signale und Events gehören dazu. > Dazu habe ich Inter process communication gefunden. > Sockets, SharedMemory usw. > > Nun würde ich Sockets verwenden um die beiden Programm ggf. auf > unterschiedlichen Rechnern laufen lassen zu könne. Wenn diese Anforderung besteht, sind Sockets eine sinnvolle Wahl. Felix U. schrieb: > Oder du machst es mit Sockets, die lösen aber nicht direkt Events oder > Signale aus. Können sie auch. Der Socket kann auch so eingerichtet werden, dass er bei Empfang von Daten das Signal SIGIO oder alternativ auch ein anderes ausgelöst. Siehe man 7 socket.
AKE schrieb: > Ich würde das gerne wie oben schon erwähnt über Events? Signale? lösen. > Nach was suche ich hier? :) Es gibt 2 möglichkeiten. Wenn du eine Art main loop hast, kannst du mit select prüfen ob das Lesen von einem filedescriptor nicht blockiert, und dann die Eingabe verarbeiten. Alternativ könnte man beim Filedescriptor das O_ASYNC flag setzen, einen Signal handler für SIGIO registrieren, und dann mit select nachsehen bei welchem Filedescriptor Daten verfügbar sind. Falls du eine art Event-loop in der Anwendung hast, könnte man nach dem Empfangen & lesen der Daten daraus natürlich auch ein Event generieren, aber das wäre dann schon eine Abstraktion der Anwendung. Achte einfach darauf, dass das Programm schläft wären es nichts macht, und nicht sinnlos CPU verbraucht.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.