von python auf shared Memory zugreifen

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
ignis-draco
User
Beiträge: 15
Registriert: Freitag 25. Februar 2011, 12:33

Hi

ich habe folgendes kleines Problem :

Ein Programm befüllt ein shared Memory mit Daten die in Form eines c struc gespeichert werden.
Diese Daten hätte ich gerne in Python. Ich bekomme die daten eingelesen mit

with open(datenpfad,"r+b")as f:
map = mmap.mmap(f.fileno(),0)

Gibt es eine Möglichkeit dann sinnvoll auf die Daten zu zugraifen ?
ich meine ohne Byte gefrickel ?

Ich habe schon mittel ctypes das C struc nachgebaut nur leider weiss ich nicht wie ich das casten kann. Geht das überhaupt ?
Oder ist es besser wenn ich mir eine .so datei baue und dann nur c Funktionen aufrufen muss ?


Habt bitte etwas nachsicht mit mir ich beschäftige mich erst seit dieser Woche mit Python.
Ach ja bevor ich es vergesse ich arbeite unter Linux mit Python 3.1.

Danke für die Hilfe schon mal im foraus.
BlackJack

@ignis-draco: So ein `mmap`-Objekt implementiert das `buffer`-Protokoll, dass heisst man kann die `from_buffer()`-Methode von `ctypes`' Typ-Objekten verwenden:

Code: Alles auswählen

In [44]: class Point(ctypes.Structure):
   ....:     _fields_ = [
   ....:        ('x', ctypes.c_int16),
   ....:        ('y', ctypes.c_int16)
   ....:     ]
   ....: 

In [45]: a
Out[45]: <mmap.mmap object at 0x9220940>

In [46]: a[0:4]
Out[46]: '\x00\x00\x00\x00'

In [47]: p = Point.from_buffer(a)

In [48]: p.x
Out[48]: 0

In [49]: p.y
Out[49]: 0

In [50]: p.x = -1

In [51]: p.y = 42

In [52]: a[0:4]
Out[52]: '\xff\xff*\x00'
ignis-draco
User
Beiträge: 15
Registriert: Freitag 25. Februar 2011, 12:33

Vielen dank werde das Morgen gleich mal ausprobieren.
Genau da nach habe ich gesucht.
Antworten