Ctypes

Un article de Haypo.

(Différences entre les versions)
Version du 19 février 2008 à 22:46 (modifier)
Haypo (Discuter | Contributions)
(Tableau d'octet (char*))
← Différence précédente
Version actuelle (16 avril 2009 à 16:44) (modifier) (défaire)
Haypo (Discuter | Contributions)
(Résumé automatique : contenu remplacé par 'Article déplacé à l'adresse '''http://wikipython.flibuste.net/Ctypes'''')
 
(9 révisions intermédiaires masquées)
Ligne 1 : Ligne 1 :
-[[Catégorie:Langage de programmation]]+Article déplacé à l'adresse '''http://wikipython.flibuste.net/Ctypes'''
-{{Retour|Langages 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).+
- +
-== Hello World! ==+
- +
-Appel simple à printf de la libc :+
- $ python+
- >>> from ctypes import cdll+
- >>> libc=cdll.LoadLibrary('libc.so.6')+
- >>> libc.printf("Hello World!\n")+
- Hello World!+
- 13+
- +
-Définition du prototype (arguments et type de retour), exemple avec sqrt() de la bibliothèque mathématique :+
- $ python+
- >>> from ctypes import cdll, c_double+
- >>> libm = cdll.LoadLibrary('libm.so')+
- >>> sqrt = libm.sqrt+
- >>> sqrt.'''argstype''' = (c_double,)+
- >>> sqrt.'''restype''' = c_double+
- >>> sqrt(c_double(10))+
- +
-Note : bug de ctypes 1.0, il faut quand même faire une conversion explicite pour les arguments c_double.+
- +
-== Pour définir une structure ==+
- +
- from ctypes import Structure, Union, c_ulong, c_int, c_ushort+
- +
- class user_regs_struct('''Structure'''):+
- '''_fields_''' = (+
- ("ebx", c_ulong),+
- ("ecx", c_ulong),+
- ("edx", c_ulong),+
- ("esi", c_ulong),+
- ...+
- )+
- +
- _sifields_t = (...)+
- class siginfo('''Union'''):+
- '''_fields_''' = (+
- ("as_int", c_int),+
- ("as_short", c_short),+
- ...+
- )+
- +
-On peut utiliser « _anonymous_ = ("_a", "_b", ...) » pour définir des champs anonymes dans une union.+
- +
-== Tableau d'octet (char*) ==+
- +
-'''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 ==+
- +
-* '''[http://fusil.hachoir.org/trac/browser/ptrace/trunk/ptrace/ctypes_errno.py ctypes_errno.py]''' : lire la variable errno, code d'erreur C+
-* '''[http://fusil.hachoir.org/trac/browser/ptrace/trunk/ptrace/ctypes_libc.py ctypes_libc.py]''' : accéder à la libc de manière portable+
-* '''[http://fusil.hachoir.org/trac/browser/ptrace/trunk/ptrace/ctypes_stdint.py ctypes_stdint.py]''' : types uint8_t, int32_t, ..., uint64_t+
-* '''[http://fusil.hachoir.org/trac/browser/ptrace/trunk/ptrace/ctypes_tools.py ctypes_tools.py]''' : outils divers+
- +
-Outils connexes :+
-* [http://fusil.hachoir.org/trac/browser/ptrace/trunk/ptrace/cpu_info.py cpu_info.py] : informations sur le processeur+
-* [http://fusil.hachoir.org/trac/browser/ptrace/trunk/ptrace/os_tools.py os_tools.py] : informations sur le système d'exploitation+
- +
-== Articles connexes ==+
- +
-* [[Python]]+

Version actuelle

Article déplacé à l'adresse http://wikipython.flibuste.net/Ctypes