2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
:mod:`dl` --- Call C functions in shared objects
|
|
|
|
================================================
|
|
|
|
|
|
|
|
.. module:: dl
|
|
|
|
:platform: Unix
|
|
|
|
:synopsis: Call C functions in shared objects.
|
2008-05-10 18:20:19 -03:00
|
|
|
:deprecated:
|
2009-01-03 16:55:06 -04:00
|
|
|
|
2008-05-10 18:20:19 -03:00
|
|
|
.. deprecated:: 2.6
|
2012-05-03 13:21:40 -03:00
|
|
|
The :mod:`dl` module has been removed in Python 3. Use the :mod:`ctypes`
|
2008-05-10 22:06:54 -03:00
|
|
|
module instead.
|
2009-01-03 16:55:06 -04:00
|
|
|
|
2007-08-15 11:28:01 -03:00
|
|
|
.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
The :mod:`dl` module defines an interface to the :c:func:`dlopen` function, which
|
2007-08-15 11:28:01 -03:00
|
|
|
is the most common interface on Unix platforms for handling dynamically linked
|
|
|
|
libraries. It allows the program to call arbitrary functions in such a library.
|
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
|
|
|
The :mod:`dl` module bypasses the Python type system and error handling. If
|
|
|
|
used incorrectly it may cause segmentation faults, crashes or other incorrect
|
|
|
|
behaviour.
|
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
This module will not work unless ``sizeof(int) == sizeof(long) == sizeof(char
|
|
|
|
*)`` If this is not the case, :exc:`SystemError` will be raised on import.
|
|
|
|
|
|
|
|
The :mod:`dl` module defines the following function:
|
|
|
|
|
|
|
|
|
2012-05-22 10:22:14 -03:00
|
|
|
.. function:: open(name[, mode=RTLD_LAZY])
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
Open a shared object file, and return a handle. Mode signifies late binding
|
|
|
|
(:const:`RTLD_LAZY`) or immediate binding (:const:`RTLD_NOW`). Default is
|
|
|
|
:const:`RTLD_LAZY`. Note that some systems do not support :const:`RTLD_NOW`.
|
|
|
|
|
|
|
|
Return value is a :class:`dlobject`.
|
|
|
|
|
|
|
|
The :mod:`dl` module defines the following constants:
|
|
|
|
|
|
|
|
|
|
|
|
.. data:: RTLD_LAZY
|
|
|
|
|
2009-07-26 11:19:57 -03:00
|
|
|
Useful as an argument to :func:`.open`.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. data:: RTLD_NOW
|
|
|
|
|
2009-07-26 11:19:57 -03:00
|
|
|
Useful as an argument to :func:`.open`. Note that on systems which do not
|
2007-08-15 11:28:01 -03:00
|
|
|
support immediate binding, this constant will not appear in the module. For
|
|
|
|
maximum portability, use :func:`hasattr` to determine if the system supports
|
|
|
|
immediate binding.
|
|
|
|
|
|
|
|
The :mod:`dl` module defines the following exception:
|
|
|
|
|
|
|
|
|
|
|
|
.. exception:: error
|
|
|
|
|
|
|
|
Exception raised when an error has occurred inside the dynamic loading and
|
|
|
|
linking routines.
|
|
|
|
|
|
|
|
Example::
|
|
|
|
|
|
|
|
>>> import dl, time
|
|
|
|
>>> a=dl.open('/lib/libc.so.6')
|
|
|
|
>>> a.call('time'), time.time()
|
|
|
|
(929723914, 929723914.498)
|
|
|
|
|
|
|
|
This example was tried on a Debian GNU/Linux system, and is a good example of
|
|
|
|
the fact that using this module is usually a bad alternative.
|
|
|
|
|
|
|
|
|
|
|
|
.. _dl-objects:
|
|
|
|
|
|
|
|
Dl Objects
|
|
|
|
----------
|
|
|
|
|
2009-07-26 11:19:57 -03:00
|
|
|
Dl objects, as returned by :func:`.open` above, have the following methods:
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
|
|
|
|
.. method:: dl.close()
|
|
|
|
|
|
|
|
Free all resources, except the memory.
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: dl.sym(name)
|
|
|
|
|
|
|
|
Return the pointer for the function named *name*, as a number, if it exists in
|
|
|
|
the referenced shared object, otherwise ``None``. This is useful in code like::
|
|
|
|
|
2009-01-03 16:55:06 -04:00
|
|
|
>>> if a.sym('time'):
|
2007-08-15 11:28:01 -03:00
|
|
|
... a.call('time')
|
2009-01-03 16:55:06 -04:00
|
|
|
... else:
|
2007-08-15 11:28:01 -03:00
|
|
|
... time.time()
|
|
|
|
|
|
|
|
(Note that this function will return a non-zero number, as zero is the *NULL*
|
|
|
|
pointer)
|
|
|
|
|
|
|
|
|
|
|
|
.. method:: dl.call(name[, arg1[, arg2...]])
|
|
|
|
|
|
|
|
Call the function named *name* in the referenced shared object. The arguments
|
|
|
|
must be either Python integers, which will be passed as is, Python strings, to
|
|
|
|
which a pointer will be passed, or ``None``, which will be passed as *NULL*.
|
2012-01-14 11:42:02 -04:00
|
|
|
Note that strings should only be passed to functions as :c:type:`const char\*`,
|
2007-08-15 11:28:01 -03:00
|
|
|
as Python will not like its string mutated.
|
|
|
|
|
|
|
|
There must be at most 10 arguments, and arguments not given will be treated as
|
2012-01-14 11:42:02 -04:00
|
|
|
``None``. The function's return value must be a C :c:type:`long`, which is a
|
2007-08-15 11:28:01 -03:00
|
|
|
Python integer.
|
|
|
|
|