SlideShare ist ein Scribd-Unternehmen logo
ctypes from C import * Steven Mohr <steven.mohr@dlr.de> TechTalk, DLR Köln, 27. Januar 2009
Gliederung Was ist CTypes ? Libraries Datentypen Einfache Datentypen Pointer Arrays Strukturierte Datentypen Funktionen Automatische Codegenerierung  Quellen
1. Was ist ctypes? Erlaubt es C-Bibliotheken zu laden und zu benutzen (Foreign function interface) Erstellung „C-kompatibler“ Pythonobjekte Gehört zur Python-Standardbibliothek
2. Bibliotheken Laden der Bibliotheken: Erstellen eines CDLL oder WinDLL-Objektes libc = cdll.LoadLibrary(„libc.so.6“) libc = CDLL(„libc.so.6“) Art des Ladens: now: alle Symbole werden sofort aufgelöst lazy: alle Symbole werden bei Bedarf aufgelöst global: die Symbole stehen zur Auflösung von Symbolen anderer Bibliotheken bereit local: die Symbole stehen nicht zur Auflösung bereit
3. Datentypen
3.1 Einfache Datentypen ctypes bietet Objekte für alle C-Standarddatentypen Bespiele: Python-Typ C-Typ ctypes Datentyp float float c_float int unsigned int c_uint int short c_short 1-character string char c_char
3.2 Pointer Erzeugung von Pointern: Mittels der pointer-Funktion i = c_int(42) pi = pointer(i) Zugriff auf Werte: >>> pi.contents c_int(42) Ändern der Referenz: >>> pi.contents = c_int(60) >>> pi.contents c_int(42)
3.3 Arrays Arraytyp erzeugen: FiveIntArray = c_int * 5 Instanzierung: array1 = FiveIntArray() array2 = FiveIntArray(1, 2, 3, 4, 5) Zugriff: >>> array1[2] 0 >>> array2[2] 3
3.4 Strukturierte Datentypen ctypes stellt Union und Structure als Objekte zur Verfügung Alle C-Strukturen erben hiervon Aufbau der Struktur wird in Attribut _fields_ bestimmt => Liste von 2-Tupeln mit Name und Typ Einfache Initialisierung: Constructor weist übergebene Werte der Reihe nach zu oder direkte Angabe als Key-Value-Paar >>> from ctypes import * >>> class POINT(Structure):  ...  _fields_ = [(&quot;x&quot;, c_int), (&quot;y&quot;, c_int)] >>> point = POINT(10, 20)  >>> print point.x, point.y  10 20
4. Funktionen Zugriff auf Funktionen: Funktionen sind Elemente des Bibliotheken-Objektes libc.printf(„Ich bin eine C-Funktion“) None, integers, longs, byte strings und unicode strings können direkt an C-Funktionen übergeben werden Übergabe von Parametern: Python- oder ctypes-Objekte By reference: Pointer-Objekt oder über byref() Über das Attribut argtypes können die erlaubten Übergabewerte gesetzt werden
4. Funktionen Rückgabewerte: Standard: int Sonst: Setzen über das Attribut restype des Funktionsobjektes  restype kann auch eine Pythonfunktion sein Bedingung: eigentlicher Rückgabewert: Integer Funktionen mit Pythonobjekten aufrufen: Ctypes sucht ein Atrribut namens _as_parameter_ und nutzt dieses
5. Automatische Codegenerierung CTypesLib mit GCCXML 2 Skripte: h2xml.py und xml2py.py Generieren das Python-Wrappermodul Python-orientierte Wrapper sind vielfach sinnvoll Nachteile: CTypesLib stark an einzelne GCCXML-Versionen gekoppelt Konfiguration dieser Toolchain sehr komplex bzw. undurchsichtig alledings: CTypesLib noch in der Entwicklung, frühes Stadium
6. Quellen ctypes-Doku:  http://docs.python.org/library/ctypes.html#module-ctypes Guy K. Kloß: Automatic C Library Wrapping - Ctypes from the Trenches The Python Papers, Vol. 3, No. 3 (2008)  http://ojs.pythonpapers.org/index.php/tpp/issue/view/10

Weitere ähnliche Inhalte

PPT
Die freie Programmiersprache Python
PDF
Scalaz introduction for Java programmers
PDF
Vorlesung 7: Laufzeit, Maps
PDF
Funktionales Programmieren mit Clojure
PPTX
WiSe 2013 | Programmierpraktikum C++ - 05_Strukturierung von Anwendungen
PPTX
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
PDF
[AyoCariRumah.Com] Tabloid Probiz Edisi 16, Jelang Mall Premium
PPT
Cuaderno de valores
Die freie Programmiersprache Python
Scalaz introduction for Java programmers
Vorlesung 7: Laufzeit, Maps
Funktionales Programmieren mit Clojure
WiSe 2013 | Programmierpraktikum C++ - 05_Strukturierung von Anwendungen
BIT I WiSe 2014 | Basisinformationstechnologie I - 08: Programmiersprachen I
[AyoCariRumah.Com] Tabloid Probiz Edisi 16, Jelang Mall Premium
Cuaderno de valores

Andere mochten auch (20)

DOCX
Evaluation Question Five
PPT
Mira hacia arriba
PPTX
Reactivos de opción multiple
PPT
ประเทศ สโลเกีย
PPTX
Reactivos de respuesta breve
PPTX
Registros conductuales
PDF
Briefing Newsletter 3 Esprit Rock
PDF
Historia en imatges
PDF
Coverings 2007
DOCX
Service & Warranty Coordinator
PPTX
DOCX
Expresionoral 160806181629
DOCX
PDF
mobile Personal Health Record - Mobile application
PPTX
Juarez,ocampo,mansilla
PDF
Elements_2014_Vol2
PDF
潔淨室恆溫恆濕機
DOCX
Problemario 2 do bimestre 2do 2015 2016
PDF
основы биоорг.химии.
PPTX
A mal tiempo, buena cara
Evaluation Question Five
Mira hacia arriba
Reactivos de opción multiple
ประเทศ สโลเกีย
Reactivos de respuesta breve
Registros conductuales
Briefing Newsletter 3 Esprit Rock
Historia en imatges
Coverings 2007
Service & Warranty Coordinator
Expresionoral 160806181629
mobile Personal Health Record - Mobile application
Juarez,ocampo,mansilla
Elements_2014_Vol2
潔淨室恆溫恆濕機
Problemario 2 do bimestre 2do 2015 2016
основы биоорг.химии.
A mal tiempo, buena cara
Anzeige

Ähnlich wie Ctypes (7)

DOC
Der C++ Standard
PDF
C++11 und c++14
PDF
Python Mike Müller
PDF
CSS3 Selektoren und deren Eigenschaften
PDF
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
PPT
Python - Excel - Bibliotheken
PDF
Einführung in die funktionale Programmierung
Der C++ Standard
C++11 und c++14
Python Mike Müller
CSS3 Selektoren und deren Eigenschaften
PLUX.NET – SOFTWAREKOMPOSITION DURCH PLUG & PLAY
Python - Excel - Bibliotheken
Einführung in die funktionale Programmierung
Anzeige

Mehr von Andreas Schreiber (20)

PPTX
Provenance-based Security Audits and its Application to COVID-19 Contact Trac...
PPTX
Visualization of Software Architectures in Virtual Reality and Augmented Reality
PPTX
Provenance as a building block for an open science infrastructure
PPTX
Raising Awareness about Open Source Licensing at the German Aerospace Center
PDF
Open Source Licensing for Rocket Scientists
PDF
Interactive Visualization of Software Components with Virtual Reality Headsets
PPTX
Provenance for Reproducible Data Science
PPTX
Visualizing Provenance using Comics
PPTX
Quantified Self Comics
PPTX
Nachvollziehbarkeit mit Hinblick auf Privacy-Verletzungen
PPTX
Reproducible Science with Python
PPTX
Python at Warp Speed
PPTX
A Provenance Model for Quantified Self Data
PPTX
Open Source im DLR
PDF
Tracking after Stroke: Doctors, Dogs and All The Rest
PPTX
High Throughput Processing of Space Debris Data
PDF
Bericht von der QS15 Conference & Exposition
PPTX
Telemedizin: Gesundheit, messbar für jedermann
PDF
Big Python
PDF
Quantified Self mit Wearable Devices und Smartphone-Sensoren
Provenance-based Security Audits and its Application to COVID-19 Contact Trac...
Visualization of Software Architectures in Virtual Reality and Augmented Reality
Provenance as a building block for an open science infrastructure
Raising Awareness about Open Source Licensing at the German Aerospace Center
Open Source Licensing for Rocket Scientists
Interactive Visualization of Software Components with Virtual Reality Headsets
Provenance for Reproducible Data Science
Visualizing Provenance using Comics
Quantified Self Comics
Nachvollziehbarkeit mit Hinblick auf Privacy-Verletzungen
Reproducible Science with Python
Python at Warp Speed
A Provenance Model for Quantified Self Data
Open Source im DLR
Tracking after Stroke: Doctors, Dogs and All The Rest
High Throughput Processing of Space Debris Data
Bericht von der QS15 Conference & Exposition
Telemedizin: Gesundheit, messbar für jedermann
Big Python
Quantified Self mit Wearable Devices und Smartphone-Sensoren

Ctypes

  • 1. ctypes from C import * Steven Mohr <steven.mohr@dlr.de> TechTalk, DLR Köln, 27. Januar 2009
  • 2. Gliederung Was ist CTypes ? Libraries Datentypen Einfache Datentypen Pointer Arrays Strukturierte Datentypen Funktionen Automatische Codegenerierung Quellen
  • 3. 1. Was ist ctypes? Erlaubt es C-Bibliotheken zu laden und zu benutzen (Foreign function interface) Erstellung „C-kompatibler“ Pythonobjekte Gehört zur Python-Standardbibliothek
  • 4. 2. Bibliotheken Laden der Bibliotheken: Erstellen eines CDLL oder WinDLL-Objektes libc = cdll.LoadLibrary(„libc.so.6“) libc = CDLL(„libc.so.6“) Art des Ladens: now: alle Symbole werden sofort aufgelöst lazy: alle Symbole werden bei Bedarf aufgelöst global: die Symbole stehen zur Auflösung von Symbolen anderer Bibliotheken bereit local: die Symbole stehen nicht zur Auflösung bereit
  • 6. 3.1 Einfache Datentypen ctypes bietet Objekte für alle C-Standarddatentypen Bespiele: Python-Typ C-Typ ctypes Datentyp float float c_float int unsigned int c_uint int short c_short 1-character string char c_char
  • 7. 3.2 Pointer Erzeugung von Pointern: Mittels der pointer-Funktion i = c_int(42) pi = pointer(i) Zugriff auf Werte: >>> pi.contents c_int(42) Ändern der Referenz: >>> pi.contents = c_int(60) >>> pi.contents c_int(42)
  • 8. 3.3 Arrays Arraytyp erzeugen: FiveIntArray = c_int * 5 Instanzierung: array1 = FiveIntArray() array2 = FiveIntArray(1, 2, 3, 4, 5) Zugriff: >>> array1[2] 0 >>> array2[2] 3
  • 9. 3.4 Strukturierte Datentypen ctypes stellt Union und Structure als Objekte zur Verfügung Alle C-Strukturen erben hiervon Aufbau der Struktur wird in Attribut _fields_ bestimmt => Liste von 2-Tupeln mit Name und Typ Einfache Initialisierung: Constructor weist übergebene Werte der Reihe nach zu oder direkte Angabe als Key-Value-Paar >>> from ctypes import * >>> class POINT(Structure): ... _fields_ = [(&quot;x&quot;, c_int), (&quot;y&quot;, c_int)] >>> point = POINT(10, 20) >>> print point.x, point.y 10 20
  • 10. 4. Funktionen Zugriff auf Funktionen: Funktionen sind Elemente des Bibliotheken-Objektes libc.printf(„Ich bin eine C-Funktion“) None, integers, longs, byte strings und unicode strings können direkt an C-Funktionen übergeben werden Übergabe von Parametern: Python- oder ctypes-Objekte By reference: Pointer-Objekt oder über byref() Über das Attribut argtypes können die erlaubten Übergabewerte gesetzt werden
  • 11. 4. Funktionen Rückgabewerte: Standard: int Sonst: Setzen über das Attribut restype des Funktionsobjektes restype kann auch eine Pythonfunktion sein Bedingung: eigentlicher Rückgabewert: Integer Funktionen mit Pythonobjekten aufrufen: Ctypes sucht ein Atrribut namens _as_parameter_ und nutzt dieses
  • 12. 5. Automatische Codegenerierung CTypesLib mit GCCXML 2 Skripte: h2xml.py und xml2py.py Generieren das Python-Wrappermodul Python-orientierte Wrapper sind vielfach sinnvoll Nachteile: CTypesLib stark an einzelne GCCXML-Versionen gekoppelt Konfiguration dieser Toolchain sehr komplex bzw. undurchsichtig alledings: CTypesLib noch in der Entwicklung, frühes Stadium
  • 13. 6. Quellen ctypes-Doku: http://docs.python.org/library/ctypes.html#module-ctypes Guy K. Kloß: Automatic C Library Wrapping - Ctypes from the Trenches The Python Papers, Vol. 3, No. 3 (2008) http://ojs.pythonpapers.org/index.php/tpp/issue/view/10