epoll_data_t *ptr attribut



  • Guten Abend!

    Mich würde es interessieren wofür die einzelnen Attribute in der [t]epoll_data_t[/t] Union verwendet werden:

    typedef union epoll_data {
                   void        *ptr; // UNKLAR
                   int          fd; // Das ist klar -> Der Socketdeskriptor
                   uint32_t     u32; // UNKLAR
                   uint64_t     u64; // UNKLAR
               } epoll_data_t;
    

    Aus dem Manual konnte ich nichts über die die anderen Attribute herausfinden.

    Das [t]ptr[/t] wäre sehr interessant, nur finde ich keine Informationen dazu. Ich hätte es gerne so benutzt, dass ich meine eigene Struktur in den [t]ptr[/t] alloziert hätte (Um eventuell mehr Informationen als nur den Socketdeskriptor zu speichern).
    Die Frage ist aber, wie käme der Kernel an den Deskriptor ran?

    Meine Struktur würde so aussehen:

    struct connection {
         int fd;
         char* address;
         // etc.
    };
    

    Würde mich sehr freuen, wenn jemand mir die UNKLARen Attribute erklären könnte.

    Bedanke mich im voraus für eure Antworten.

    Danke.



  • Toad88 schrieb:

    Das [t]ptr[/t] wäre sehr interessant, nur finde ich keine Informationen dazu. Ich hätte es gerne so benutzt, dass ich meine eigene Struktur in den [t]ptr[/t] alloziert hätte (Um eventuell mehr Informationen als nur den Socketdeskriptor zu speichern).
    Die Frage ist aber, wie käme der Kernel an den Deskriptor ran?

    Genau dafür wird ptr genutzt. Man gibt einfach den Pointer zu einer eigenen Struktur an. Der Kernel schaut eh nicht in deinen data-Teil. Den Deskriptor erhält er ja beim Aufruf von man: epoll_ctl



  • rüdiger schrieb:

    Toad88 schrieb:

    Das [t]ptr[/t] wäre sehr interessant, nur finde ich keine Informationen dazu. Ich hätte es gerne so benutzt, dass ich meine eigene Struktur in den [t]ptr[/t] alloziert hätte (Um eventuell mehr Informationen als nur den Socketdeskriptor zu speichern).
    Die Frage ist aber, wie käme der Kernel an den Deskriptor ran?

    Genau dafür wird ptr genutzt. Man gibt einfach den Pointer zu einer eigenen Struktur an. Der Kernel schaut eh nicht in deinen data-Teil. Den Deskriptor erhält er ja beim Aufruf von man: epoll_ctl

    Ehrlich gesagt, habe ich genau auf dich gewartet. 😃
    Stimmt, daran habe ich nicht gedacht.

    Vielen dank!

    Weisst du vielleicht wozu die anderen Attribute sind? (u32 und u64) ?



  • Toad88 schrieb:

    Weisst du vielleicht wozu die anderen Attribute sind? (u32 und u64) ?

    epoll_data ist ein union. Das heißt alle elemente in dem union teilen sich den gleichen speicherbereich.



  • firefly schrieb:

    Toad88 schrieb:

    Weisst du vielleicht wozu die anderen Attribute sind? (u32 und u64) ?

    epoll_data ist ein union. Das heißt alle elemente in dem union teilen sich den gleichen speicherbereich.

    Wenn das die Antwort auf meine Frage war, habe ich sie nicht verstanden.
    Ich habe nicht gefragt was eine union ist, sondern was die Verwendung von u32 und u64 ist. Vielleicht übersehe ich bloss was du damit meintest.

    typedef union epoll_data {
                   void        *ptr; // Kann irgendwas enthalten (User-Daten)
                   int          fd; // Der Socketdeskriptor
                   uint32_t     u32; // Unklar
                   uint64_t     u64; // Unklar
               } epoll_data_t;
    


  • Die sind einfach dafür da, falls man Integer-Daten (zB Index in ein Array von Daten) speichern will. Ich hab die selbst noch nicht benutzt und benutze eigentlich immer ptr.


Anmelden zum Antworten