Select
-
Hallo.
Ohne Zeit zu verlieren, hier mein Problem:
Ich habe 2 Programme, die eine RS232 Schnittstelle nutzen.
Programm 1 laeuft durchgehend und wartet auf Input von der RS232 Schnittstelle.
Programm 2 laeuft hingegen nur dann, wann ich es moechte. Nun soll Programm 1 stehen bleiben und nichts machen, ausser darauf warten, bis Programm2 wieder beendet ist.
Wie kann ich das realisieren!? Wird das mithilfe von Select realisiert?!
MfG
escapete
-
nö, das wird mit Hilfe von man: wait(2) bzw. waitpid realisiert.
man: select(2) ist für I/O-Multiplexing gedacht.
-
hhmn..das versteh ich nich ganz...
mit waitpid warte ich doch im prinzip auf childs, die ich ueber "fork()" erschaffen haben. Allerdings versteh ich nicht, wie sich 2 Programme eine Schnitstelle teilen sollen. Koenntest du das bitte etwas ausfuehrlicher schreiben? Das waer nett, vielen Dank scho mal...
escapete
-
Startest du Programm2 aus Programm1? Dann wäre Programm2 doch ein Child-Prozess.
-
Nein. Es handelt sich um 2 unabhaengige Programme.
Das macht es ja gerad etwas schwieriger.
-
hmm, unter *BSD oder Mac OS X würde mir jetzt man: kqueue(2) einfallen Leider hat Linux nichts vergleichbares.
In Linux musst du vermutlich über das /proc-Dateisystem gehen. Unter /proc findest du für jedes Programm ein "Pseudoverzeichnis", dessen Namen der PID entspricht. Ich weiß nicht ob inotify auf /proc-funktioniert, sonst könntest du einfach inotify benutzen und dich informieren lassen, wenn das entsprechende Verzeichnis "weg" ist.
-
hmn...ansonsten wuerde ich SEMAPHOREN vorschlagen Wuerd auch gehen, da diese ja Systemweit sind.