[ctypes] convert pointer to string?
marek.rocki at wp.pl
marek.rocki at wp.pl
Wed May 21 12:32:57 EDT 2008
Neal Becker napisał(a):
> In an earlier post, I was interested in passing a pointer to a structure to
> fcntl.ioctl.
>
> This works:
>
> c = create_string_buffer (...)
> args = struct.pack("iP", len(c), cast (pointer (c), c_void_p).value)
> err = fcntl.ioctl(eos_fd, request, args)
>
> Now to do the same with ctypes, I have one problem.
>
> class eos_dl_args_t (Structure):
> _fields_ = [("length", c_ulong),
> ("data", c_void_p)]
> ...
> args = eos_dl_args_t()
> args_p = cast(pointer(args), c_void_ptr).value
> fcntl.ioctl(fd, request, args_p) <<< May fail here
>
> That last may fail, because .value creates a long int, and ioctl needs a
> string.
>
> How can I convert my ctypes structure to a string? It _cannot_ be a c-style
> 0-terminate string, because the structure may contain '0' values.
Hello. I'm not completely sure what your problem is ("may fail" is not
a good description. Does it fail or does it not?). If you want a
pointer to a structure as the third argument to ioctl, this would be
imho the easiest way to do it with ctypes:
> class eos_dl_args_t(Structure):
> _fields_ = [("length", c_ulong), ("data", c_void_p)]
> args = eos_dl_args_t()
> fcntl.ioctl(fd, request, byref(args))
Regards,
Marek
More information about the Python-list
mailing list