Systemweite Filedescriptoren



  • Hallo Forum,

    gibt es eine Möglichkeit Dateideskriptoren Systemweit/Prozessübergreifend zu definieren?

    Ich habe einen Socket descriptor und möchte, dass ein anderer Prozess mit diesem kommuniziert.
    Leider sind die Ressourcen so wie ich das bisher sehe nur Prozessweit abgelegt.
    Kann ich diese "handle"-Referenz im anderen Prozess bekannt machen?

    Danke.



  • jghj schrieb:

    Hallo Forum,

    gibt es eine Möglichkeit Dateideskriptoren Systemweit/Prozessübergreifend zu definieren?

    Ich habe einen Socket descriptor und möchte, dass ein anderer Prozess mit diesem kommuniziert.
    Leider sind die Ressourcen so wie ich das bisher sehe nur Prozessweit abgelegt.
    Kann ich diese "handle"-Referenz im anderen Prozess bekannt machen?

    Danke.

    stichwort dup2() / fnctl() mit F_DUPFD. ich bin mir aber jetzt nicht sicher ob das mit sockets geht, musst du mal selbst ergooglen. falls nicht, dann erstelle eine pipe deren deskriptor du definitiv duplizieren kannst. wenn sich dann ein prozess darum kümmert sämtlichen i/o vom socket in/aus dieser pipe zu schreiben/lesen, dann kannst du die pipe im anderen prozess so verwenden als wäre es eben dieser offene socket. :xmas1:



  • oh, was ich noch vergessen habe zu sagen:

    Der Prozess, der den Socket benutzen soll, existiert bereits.

    Über die angesprochenen Methoden kann ich ihn afaik ja nur dazu befähigen, dass er dann auch in weiteren, neu erstellten, Prozessen übernommen wird.

    Ich bräuchte aber echt eine Funktion, der ich sagen kann: Übernehme den Descriptoreintrag in die Deskriptortabelle des Prozesses xy.

    Falls nicht lasse ich mich gerne belehren 😉



  • Falls das von dir Angesprochene doch genau für den Zweck zu gebrauchen ist wärs nett wenn du mir das nochmal detaillierter sagen könntest.

    Werde dann wirklich aus der Doku nicht ganz schlau.

    Habe versucht den Socket zu duplizieren (dup()) und danach mit fcntl() den OWNER auf den Zielprozess zu mappen usw. aber nichts davon funktioniert.

    Einen eigenen Prozess, der sich um das Socket-Pipehandling kümmert halte ich auch für übertrieben; ich denke außerdem, dass es ein Thread sein müsste, weil der Prozess da ja auch schon keinen Zugriff auf den Socket haben dürfte 😉

    Danke schonmal.



  • unter linux sind filedescriptoren zwar gebunden an einen prozess, worauf sie zeigen aber nicht. per unix socket kannst du filedescriptoren anderen prozessen schicken. man 7 unix wird dir unter "Ancillary Messages" helfen.


Log in to reply