Linux suse LEAP 15.1: shared memory mit shmget(), shmat()

Hinweis: In dem Thema Linux suse LEAP 15.1: shared memory mit shmget(), shmat() gibt es 4 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • OpenSuse Linux LEAP 15.1:

    In einem c++-Programm möchte ich im ersten Prozess ein Shared Memory mit shmget(...) und shmat(...) anlegen und in dem angelegtem Speicher ein cpp-Object abspeichern.

    Im zweiten Prozess möchte ich aus dem Shared Memory unter der Adresse, die shmat() zurückliefert, das im ersten Prozess gespeicherte Objekt zurücklesen.

    Das Problem ist: Beim Lesen des Objects aus dem Shared memory über eine C++-Funktion wird Programmcode ausgeführt, der im Shared Memory gespeichert ist. Als Zugriffsattribute für das Shared Memory ist aber nur lesen/schreiben und kein execute möglich.

    Hat jemand einen Lösungsvorschlag?

    Im Gegensatz gibt es in Windows das Problem nicht, da kann man ein C++-Objekt im Shared Memory abspeichern und Objekt-Funktionen ausführen.

    Für den Inhalt des Beitrages 279155 haftet ausdrücklich der jeweilige Autor: hscJH

  • Das hört sich nach dem folgenden Teil aus "man shmat" an:


    Code
           In  addition  to  SHM_RND,  the following flags may be specified in the
           shmflg bit-mask argument:
    
           SHM_EXEC (Linux-specific; since Linux 2.6.9)
                  Allow the contents of the segment to be  executed.   The  caller
                  must have execute permission on the segment.

    Für den Inhalt des Beitrages 279164 haftet ausdrücklich der jeweilige Autor: Welm

  • Hallo,

    danke für die Info, werde ich gleich mal probieren.

    Im suse-Linux-shmat-manual ist von dem Flag SHM_EXEC keine Rede, wohl aber im ubundu-Linux-shmat-manual.

    Ich werde das mal probieren.


    Nochmals Danke und Gruß

    hscJH

    Für den Inhalt des Beitrages 279185 haftet ausdrücklich der jeweilige Autor: hscJH

  • Hallo,

    unter openSuse geht das leider nicht.

    Wenn beim Aufruf von shmat im 3. Parameter SHM_EXEC gesetzt ist

    void * shmat (..., ..., SHM_EXEC)

    kommt die Fehlermeldung "Fehler aus shmat".


    Gruß

    hscJH

    Für den Inhalt des Beitrages 279187 haftet ausdrücklich der jeweilige Autor: hscJH

  • Im suse-Linux-shmat-manual ist von dem Flag SHM_EXEC keine Rede...

    Sonderbar. Das oben zitierte stammt aus "man shmat" in suse 15.1...


    Da steht auch, welche Werte man im Fehlerfall in "errno" findet.


    Weiter kann ich nichts dazu sagen ... es ist ewig her, dass ich was mit C oder seinen Abkömmlingen gemacht habe. Da müsste jemand anders was zu sagen.

    Für den Inhalt des Beitrages 279194 haftet ausdrücklich der jeweilige Autor: Welm