blob: 3c3c3d239623853124365ebb783918eac490592d [file] [log] [blame]
Paul Sokolovsky809eaa22014-01-29 00:37:09 +02001import ffi
Paul Sokolovskyaf5b5092018-10-20 12:36:48 +03002import uctypes
Paul Sokolovsky809eaa22014-01-29 00:37:09 +02003
4libc = ffi.open("libc.so.6")
5print("libc:", libc)
6print()
7
8# Declare few functions
Paul Sokolovskyecfd8e12016-06-17 19:21:37 +03009perror = libc.func("v", "perror", "s")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020010time = libc.func("i", "time", "p")
Paul Sokolovskyecfd8e12016-06-17 19:21:37 +030011open = libc.func("i", "open", "si")
Paul Sokolovskyaf5b5092018-10-20 12:36:48 +030012qsort = libc.func("v", "qsort", "piiC")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020013# And one variable
14errno = libc.var("i", "errno")
15
16print("time:", time)
17print("UNIX time is:", time(None))
18print()
19
Paul Sokolovskyaf5b5092018-10-20 12:36:48 +030020perror("perror before error")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020021open("somethingnonexistent__", 0)
Paul Sokolovsky70536212016-06-17 19:24:58 +030022print("errno object:", errno)
23print("errno value:", errno.get())
Paul Sokolovskyaf5b5092018-10-20 12:36:48 +030024perror("perror after error")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020025print()
26
27def cmp(pa, pb):
Paul Sokolovskyaf5b5092018-10-20 12:36:48 +030028 a = uctypes.bytearray_at(pa, 1)
29 b = uctypes.bytearray_at(pb, 1)
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020030 print("cmp:", a, b)
31 return a[0] - b[0]
32
Paul Sokolovskyaf5b5092018-10-20 12:36:48 +030033cmp_cb = ffi.callback("i", cmp, "PP")
34print("callback:", cmp_cb)
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020035
Paul Sokolovsky70536212016-06-17 19:24:58 +030036s = bytearray(b"foobar")
Paul Sokolovsky809eaa22014-01-29 00:37:09 +020037print("org string:", s)
Paul Sokolovskyaf5b5092018-10-20 12:36:48 +030038qsort(s, len(s), 1, cmp_cb)
Paul Sokolovsky70536212016-06-17 19:24:58 +030039print("qsort'ed string:", s)