diff options
author | Armin Rigo <arigo@tunes.org> | 2012-06-14 18:33:49 +0200 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2012-06-14 18:33:49 +0200 |
commit | 5ef91bc1a83a612212c1ddb1cc26c404aed758ae (patch) | |
tree | 187e898f6a3a69e224193cbb2a03910cbf2ca1ce | |
parent | 27a64cff66ef73e423d61b9c648e3ff358c608d8 (diff) | |
download | cffi-5ef91bc1a83a612212c1ddb1cc26c404aed758ae.tar.gz |
Add another example showing the API level with verify().
-rw-r--r-- | README.md | 31 |
1 files changed, 27 insertions, 4 deletions
@@ -1,4 +1,4 @@ -cffi +CFFI ==== Foreign Function Interface for Python calling C code. The aim of this project @@ -31,13 +31,13 @@ follows a few principles: but all C89 should be, including macros (apart from the most advanced (ab)uses of these macros). -Simple example --------------- +Simple example (ABI level) +-------------------------- >>> from cffi import FFI >>> ffi = FFI() >>> ffi.cdef(""" - ... int printf(const char *format, ...); // copy-pasted from the man page + ... int printf(const char *format, ...); // copy-pasted from the man page ... """) >>> C = ffi.dlopen(None) # loads the entire C namespace >>> arg = ffi.new("char[]", "world") # equivalent to C code: char arg[] = "world"; @@ -45,6 +45,29 @@ Simple example hi there, world! >>> +Simple example (API level) +-------------------------- + + from cffi import FFI + ffi = FFI() + ffi.cdef(""" // some declarations from the man page + struct passwd { + char *pw_name; + ...; + }; + struct passwd *getpwuid(int uid); + """) + C = ffi.verify(""" // passed to the real C compiler + #include <sys/types.h> + #include <pwd.h> + """) + assert str(C.getpwuid(0).pw_name) == 'root' + +Note that the above example works independently of the exact layout of +"struct passwd", but so far require a C compiler at runtime. (This will +be improved with caching and distribution of the compiled code.) + + More documentation ------------------ |