tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
901
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    SouthernWind SouthernWind ist offline Rookie
    Registriert seit
    Jul 2006
    Beiträge
    9
    Hi Leute,

    ich hänge hier gerade an einer richtig kniffligen Sache..... vielleicht kann mir da einer von Euch ein paar Tipps geben, wäre super

    Also ein bestehendes C-Programm öffnet einen Shared-Memory Bereich im Hauptspeicher und erstellt darin eine Struktur. Diese Struktur beinhaltet verschiedene Variablen.
    Beispiel:
    Code c:
    1
    2
    3
    4
    5
    
    typedef struct {
           int aaa;
           string bbb;
           char ccc[16];
       } SM_Struct;

    Ich muss jetzt aus PHP heraus auf diesen erstellte Shared Memory Bereich zugreifen und die Variablen innerhalb der C-Struktur lesen und auch ändern.

    Den Zugriff auf ein Shared Memory in php hab ich schon:
    PHP-Code:
    // Create 100 byte shared memory block with system id of 0xff3
    $shm_id shmop_open(0xff3"c"0644100);
    // Get shared memory block's size
    $shm_size shmop_size($shm_id); 
    aber damit hab ich noch immer keinen Zugriff auf die Struktur bzw. die Variablen darin.....

    Da dieses Programm wirklich ziemlich wichtig ist und ich gerade so ziemlich in der Luft hänge würde ich mich über jede Hilfe, Tipp, Ansatz, ... sehr freuen!

    Danke schon im Voraus.

    MfG
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,

    ich glaube, du müsstest dort die Daten in einem Format hinterlegen, mit dem PHP etwas anfangen kann.

    JSON dürfte sich da anbieten.
     

  3. #3
    SouthernWind SouthernWind ist offline Rookie
    Registriert seit
    Jul 2006
    Beiträge
    9
    Moin Sven,

    was meinst Du genau in einem Format mit dem PHP was anfangen kann?
    Kann PHP nicht auf von C/C++ gesetzte Variablen zugreifen? Gibt es da Unterschiede bei int/long/double/string zu PHP
    Bei PHP gibt es doch wenn ich das bisher richtig gelesen hab auch struct...... aber irgendwie scheint mir das wohl was anderes zu sein als eine C-Struct.....

    Ein weiteres Problem ist auch, dass es möglichst ohne Änderung am bestehenden C-Programm laufen sollte.
    Im Extremfall wenn nichts anderes mehr geht wäre das auch evtl. denkbar...... aber wäre dann eben ein schon ziemlich großer Aufwand..... wie würde das denn dann mit JSON funktionieren? Das Ding ist ich muss es ja lesen, ändern und wieder zurückschreiben können...... wäre das überhaupt mit JSON machbar

    Danke & Gruß
     

  4. #4
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    shmop_read() liefert einen String....keine Variablen.

    Daher auch der Vorschlag mit JSON, da es dazu geeignet ist, Datenstrukturen sprachunabhängig als String zu speichern.

    Was da lesen/schreiben etc. anbelangt, in PHP geht das recht unproblematisch.

    Du kannst JSON-Strings dekodieren per json_decode()
    Dann änderst du die Daten nach Gusto und erstellst wieder den String zum zurückschreiben-> json_encode()

    Ob das in C von Hause aus ähnlich einfach möglich ist, weiss ich nicht, aber passende Hilfsmittel findest du unter http://www.json.org/json-de.html
     

  5. #5
    SouthernWind SouthernWind ist offline Rookie
    Registriert seit
    Jul 2006
    Beiträge
    9
    Ein frohes neues Jahr

    Ich sitze jetzt wieder an meinem Shared-Memory und hab mir jetzt auch mal JSON angeschaut. also das sieht ja schon mal ganz vielversprechend aus denk.naja auch wenn ich bis jetzt da noch nicht wirklich richtig durchblicke.

    Zitat Zitat von Sven Mintel Beitrag anzeigen
    Was da lesen/schreiben etc. anbelangt, in PHP geht das recht unproblematisch.

    Du kannst JSON-Strings dekodieren per json_decode()
    Dann änderst du die Daten nach Gusto und erstellst wieder den String zum zurückschreiben-> json_encode()

    [...] passende Hilfsmittel findest du unter http://www.json.org/json-de.html
    Also auf der Seite ist ja für jede Sprache Bibliotheken verfügbar.

    Jetzt weiß ich aber nicht so genau welches für mich das richtige ist. Es handelt sich hier zwar um eine C-Struktur. aber das ganze wird als cpp gespeichert, d.h. C++.
    hab gedacht komm, schau ich mir mal die C-Bibliothek an. was jetzt der Unterschied zwischen JSON parser, json-c, M's JSON parser, YAJL, cJSON und Jansson ist, ist mir nicht wirklich klar.
    Welches ist denn zu empfehlen und warum

    Gibt es vielleicht irgendwo im Internet Tutorials oder Beispiele wie man eine solche Struktur mit JSON encodieren/decodieren kann

    Meintest Du unproblematisch lesen/schreiben mit PHP wegen dem JSON oder Zugriff aufs Shared Memory

    Würde mich über jeden Link oder Hilfe sehr freuen


    Danke, Viele Grüße
     

  6. #6
    Avatar von saftmeister
    saftmeister saftmeister ist gerade online Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Wenn dir das mit dem JSON zu kompliziert ist, kannst vielleicht mit dem Overhead von XML leben? libxml2 ist dein Freund. PHP kann es, C kann es. Die Implementierung ist somit nicht die schwierigste Sache der Welt. Wie gesagt, wenn du mit dem Overhead von XML leben kannst
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

  7. #7
    SouthernWind SouthernWind ist offline Rookie
    Registriert seit
    Jul 2006
    Beiträge
    9
    Hi,
    was meinst Du mit overhead? Die Tags die auf- und zugemacht werden bei xml
    JSON ist aber im allgemeinen für so etwas schon besser geeignet, oder
    Mir ist eingefallen ich habe schon mal was mit JSON gemacht...... schon länger her und das war auch von PHP zu JavaScript.....
    also ich würde mich da prinzipiell schon mal rantrauen...... (mit etwas Start-HIlfe von Euch vielleicht *gg*)
     

  8. #8
    Avatar von saftmeister
    saftmeister saftmeister ist gerade online Der Saft sei mit dir
    tutorials.de Premium-User
    Registriert seit
    May 2006
    Ort
    There is no place like 127.0.0.1
    Beiträge
    3.521
    Ok, dann will ich mal meine Meinung (nur Meinung, da ich die angegebenen Libs nicht detailiert kenne) zum Besten geben:

    1. Nur Parser bringt dir nichts, du brauchst auch einen Encoder, zu mindest, wenn du bi-direktional Daten austauschen willst. Das heißt

    JSON_checker
    JSON parser
    M's JSON parser
    cJSON

    fallen schon mal aus.

    2. json-c würde ich aus Gründen der Code-Qualität außen vor lassen. Auf Anhieb aufgefallen waren mir malloc()'s die nicht freigegeben werden.

    Ich würde aus YAJL und Jansson mir einen aussuchen und zwar den, bei denen die Beispiele am leichtesten nachzuvollziehen sind und überhaupt erstmal funktionieren. Persönlich würde ich zu Jansson tendieren, kann aber nicht sagen warum. Rein vom Gefühl her... Dokumentiert sind beide anscheinend gut.
     
    Grüße
    --
    Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)

Ähnliche Themen

  1. Shared Memory in DLLs
    Von Cromon im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 17.04.10, 19:51
  2. Shared Memory
    Von martinpriebe im Forum .NET Café
    Antworten: 9
    Letzter Beitrag: 02.07.08, 09:01
  3. Shared Memory unter C#
    Von Zero_Base im Forum .NET Café
    Antworten: 2
    Letzter Beitrag: 02.04.06, 12:33
  4. Shared Memory Graka
    Von redX im Forum Hardware
    Antworten: 3
    Letzter Beitrag: 13.09.05, 22:34
  5. shared memory
    Von seydou im Forum Linux & Unix
    Antworten: 1
    Letzter Beitrag: 10.02.05, 20:16