Skye schrieb:
> Great, thanks for the help (I'm fairly new to Python, didn't know
> about ctypes)
> 
>     from ctypes import *
>     libc = CDLL("libc.so.7")
>     size = c_uint(0)
>     libc.sysctlbyname("net.inet.ip.stats", None, byref(size), None, 0)
>     buf = c_char_p(" " * size.value)
>     libc.sysctlbyname("net.inet.ip.stats", buf, byref(size), None, 0)

IIUC, sysctlbyname writes the information you requested into the buffer supplied
as second argument.  If this is true, then the above code is incorrect.
c_char_p(src) creates an object that shares the buffer with the Python string 
'src';
but Python strings are immutable and you must not write ctypes code that 
modifies them.

Instead, you should code:

     from ctypes import *
     libc = CDLL("libc.so.7")
     size = c_uint(0)
     libc.sysctlbyname("net.inet.ip.stats", None, byref(size), None, 0)
     buf = create_string_buffer(size.value)
     libc.sysctlbyname("net.inet.ip.stats", buf, byref(size), None, 0)

Thomas
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to