Ctypes
Un article de Haypo.
(Différences entre les versions)
| Version du 19 février 2008 à 22:33 (modifier) Haypo (Discuter | Contributions) (→Pour définir une structure) ← Différence précédente |
Version du 19 février 2008 à 22:37 (modifier) (défaire) Haypo (Discuter | Contributions) (→Tableau d'octet) Différence suivante → |
||
| Ligne 37 : | Ligne 37 : | ||
| == Tableau d'octet == | == Tableau d'octet == | ||
| + | '''create_string_buffer(str)''' crée un tableau d'octets pouvant contenir des octets nuls : | ||
| from ctypes import create_string_buffer | from ctypes import create_string_buffer | ||
| python_string = "string with \0 byte" | python_string = "string with \0 byte" | ||
| c_string = create_string_buffer(python_string) | c_string = create_string_buffer(python_string) | ||
| - | assert c_string.value == 'string with' | + | assert c_string.value == 'string with ' |
| assert c_string.raw == python_string | assert c_string.raw == python_string | ||
| + | |||
| + | '''create_string_buffer(int)''' crée un tampon de N octet pouvant contenir de octets nuls : | ||
| + | >>> from ctypes import create_string_buffer | ||
| + | >>> buffer = create_string_buffer(5) | ||
| + | >>> buffer.raw | ||
| + | '\x00\x00\x00\x00\x00' | ||
| + | |||
| + | '''c_char_p''' tronque au premier octet nul : | ||
| + | from ctypes import create_string_buffer | ||
| + | python_string = "string with \0 byte" | ||
| + | c_string = c_char_p(python_string) | ||
| + | assert c_string.value == 'string with ' | ||
| == Modules == | == Modules == | ||
Version du 19 février 2008 à 22:37
Catégorie:Langage de programmation
Retour aux langages de programmation
ctypes est une bibliothèque Python permettant d'accéder aux fonctions et symboles d'une bibliothèque externe (en particulier, codée en C).
Sommaire |
Hello World!
$ python
>>> libc=cdll.LoadLibrary('libc.so.6')
>>> libc.printf("Hello World!\n")
Hello World!
13
Pour définir une structure
from ctypes import Structure, Union
class user_regs_struct(Structure):
_fields_ = (
("ebx", c_ulong),
("ecx", c_ulong),
("edx", c_ulong),
("esi", c_ulong),
...
)
_sifields_t = (...)
class siginfo(Structure):
_fields_ = (
("si_signo", c_int),
("si_errno", c_int),
("si_code", c_int),
("_sifields", _sifields_t)
)
_anonymous_ = ("_sifields",)
Tableau d'octet
create_string_buffer(str) crée un tableau d'octets pouvant contenir des octets nuls :
from ctypes import create_string_buffer python_string = "string with \0 byte" c_string = create_string_buffer(python_string) assert c_string.value == 'string with ' assert c_string.raw == python_string
create_string_buffer(int) crée un tampon de N octet pouvant contenir de octets nuls :
>>> from ctypes import create_string_buffer >>> buffer = create_string_buffer(5) >>> buffer.raw
'\x00\x00\x00\x00\x00'
c_char_p tronque au premier octet nul :
from ctypes import create_string_buffer python_string = "string with \0 byte" c_string = c_char_p(python_string) assert c_string.value == 'string with '
Modules
- ctypes_errno.py : lire la variable errno, code d'erreur C
- ctypes_libc.py : accéder à la libc de manière portable
- ctypes_stdint.py : types uint8_t, int32_t, ..., uint64_t
- ctypes_tools.py : outils divers
Outils connexes :
- cpu_info.py : informations sur le processeur
- os_tools.py : informations sur le système d'exploitation

