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.


Log in to reply