Forum: PC-Programmierung IPC in C (Signa/Event?)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von AKE (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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 Moderator
von Felix U. (ubfx)


Bewertung
0 lesenswert
nicht lesenswert
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).

von Rolf M. (rmagnus)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Daniel A. (daniel-a)


Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.