From 809eaa2679f59a74f394aa09515fd484ff3f0ad8 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Wed, 29 Jan 2014 00:37:09 +0200 Subject: [PATCH] Add FFI module example. --- examples/unix/ffi_example.py | 38 ++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 examples/unix/ffi_example.py diff --git a/examples/unix/ffi_example.py b/examples/unix/ffi_example.py new file mode 100644 index 0000000000..0ac12203e6 --- /dev/null +++ b/examples/unix/ffi_example.py @@ -0,0 +1,38 @@ +import ffi + +libc = ffi.open("libc.so.6") +print("libc:", libc) +print() + +# Declare few functions +perror = libc.func("v", "perror", ["s"]) +time = libc.func("i", "time", "p") +open = libc.func("i", "open", ["s", "i"]) +qsort = libc.func("v", "qsort", "piip") +# And one variable +errno = libc.var("i", "errno") + +print("time:", time) +print("UNIX time is:", time(None)) +print() + +perror("ffi before error") +open("somethingnonexistent__", 0) +print(errno) +perror("ffi after error") +print() + +def cmp(pa, pb): + a = ffi.as_bytearray(pa, 1) + b = ffi.as_bytearray(pb, 1) + print("cmp:", a, b) + return a[0] - b[0] + +cmp_c = ffi.callback("i", cmp, "pp") +print("callback:", cmp_c) + +# TODO: violates Py semantics, pass bytearray +s = "foobar" +print("org string:", s) +qsort(s, len(s), 1, cmp_c) +print("qsort'ed:", s)