blob: f650e33708e3fc4ce20ceca4228fe4b25162d139 [file] [log] [blame]
Paul Sokolovsky809eaa22014-01-29 00:37:09 +02001import ffi
2
3libc = ffi.open("libc.so.6")
4print("libc:", libc)
5print()
6
7# Declare few functions
Paul Sokolovskyecfd8e12016-06-17 19:21:37 +03008perror = libc.func("v", "perror", "s")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +02009time = libc.func("i", "time", "p")
Paul Sokolovskyecfd8e12016-06-17 19:21:37 +030010open = libc.func("i", "open", "si")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020011qsort = libc.func("v", "qsort", "piip")
12# And one variable
13errno = libc.var("i", "errno")
14
15print("time:", time)
16print("UNIX time is:", time(None))
17print()
18
19perror("ffi before error")
20open("somethingnonexistent__", 0)
Paul Sokolovsky70536212016-06-17 19:24:58 +030021print("errno object:", errno)
22print("errno value:", errno.get())
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020023perror("ffi after error")
24print()
25
26def cmp(pa, pb):
27 a = ffi.as_bytearray(pa, 1)
28 b = ffi.as_bytearray(pb, 1)
29 print("cmp:", a, b)
30 return a[0] - b[0]
31
32cmp_c = ffi.callback("i", cmp, "pp")
33print("callback:", cmp_c)
34
Paul Sokolovsky70536212016-06-17 19:24:58 +030035s = bytearray(b"foobar")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020036print("org string:", s)
37qsort(s, len(s), 1, cmp_c)
Paul Sokolovsky70536212016-06-17 19:24:58 +030038print("qsort'ed string:", s)