mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
Remove the dl module per PEP 3108.
This commit is contained in:
parent
e7789b186d
commit
6cf49cf106
11 changed files with 5 additions and 467 deletions
|
|
@ -1,108 +0,0 @@
|
|||
|
||||
:mod:`dl` --- Call C functions in shared objects
|
||||
================================================
|
||||
|
||||
.. module:: dl
|
||||
:platform: Unix
|
||||
:synopsis: Call C functions in shared objects.
|
||||
.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
|
||||
|
||||
The :mod:`dl` module defines an interface to the :cfunc:`dlopen` function, which
|
||||
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:
|
||||
|
||||
|
||||
.. function:: open(name[, mode=RTLD_LAZY])
|
||||
|
||||
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
|
||||
|
||||
Useful as an argument to :func:`open`.
|
||||
|
||||
|
||||
.. data:: RTLD_NOW
|
||||
|
||||
Useful as an argument to :func:`open`. Note that on systems which do not
|
||||
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
|
||||
----------
|
||||
|
||||
Dl objects, as returned by :func:`open` above, have the following methods:
|
||||
|
||||
|
||||
.. 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::
|
||||
|
||||
>>> if a.sym('time'):
|
||||
... a.call('time')
|
||||
... else:
|
||||
... 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*.
|
||||
Note that strings should only be passed to functions as :ctype:`const char\*`,
|
||||
as Python will not like its string mutated.
|
||||
|
||||
There must be at most 10 arguments, and arguments not given will be treated as
|
||||
``None``. The function's return value must be a C :ctype:`long`, which is a
|
||||
Python integer.
|
||||
|
||||
|
|
@ -304,7 +304,7 @@ always available.
|
|||
.. function:: getdlopenflags()
|
||||
|
||||
Return the current value of the flags that are used for :cfunc:`dlopen` calls.
|
||||
The flag constants are defined in the :mod:`dl` and :mod:`DLFCN` modules.
|
||||
The flag constants are defined in the :mod:`ctypes` and :mod:`DLFCN` modules.
|
||||
Availability: Unix.
|
||||
|
||||
|
||||
|
|
@ -587,8 +587,8 @@ always available.
|
|||
the interpreter loads extension modules. Among other things, this will enable a
|
||||
lazy resolving of symbols when importing a module, if called as
|
||||
``sys.setdlopenflags(0)``. To share symbols across extension modules, call as
|
||||
``sys.setdlopenflags(dl.RTLD_NOW | dl.RTLD_GLOBAL)``. Symbolic names for the
|
||||
flag modules can be either found in the :mod:`dl` module, or in the :mod:`DLFCN`
|
||||
``sys.setdlopenflags(ctypes.RTLD_GLOBAL)``. Symbolic names for the
|
||||
flag modules can be either found in the :mod:`ctypes` module, or in the :mod:`DLFCN`
|
||||
module. If :mod:`DLFCN` is not available, it can be generated from
|
||||
:file:`/usr/include/dlfcn.h` using the :program:`h2py` script. Availability:
|
||||
Unix.
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ of it. Here's an overview:
|
|||
spwd.rst
|
||||
grp.rst
|
||||
crypt.rst
|
||||
dl.rst
|
||||
termios.rst
|
||||
tty.rst
|
||||
pty.rst
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue