PHP-Zugriff auf Shared-Memory (Struktur)

SouthernWind

Grünschnabel
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:
C:
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:
// Create 100 byte shared memory block with system id of 0xff3
$shm_id = shmop_open(0xff3, "c", 0644, 100);
// 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
 
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.
 
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ß
 
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
 
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.

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.

www.json.org/json-de.html hat gesagt.:
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
 
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 :-)
 
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*) ;-)
 
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.
 
Zurück