summaryrefslogtreecommitdiff
path: root/sys/src/cmd/python/Doc/lib/libdl.tex
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
commit458120dd40db6b4df55a4e96b650e16798ef06a0 (patch)
tree8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Doc/lib/libdl.tex
parent3a742c699f6806c1145aea5149bf15de15a0afd7 (diff)
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Doc/lib/libdl.tex')
-rw-r--r--sys/src/cmd/python/Doc/lib/libdl.tex101
1 files changed, 101 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Doc/lib/libdl.tex b/sys/src/cmd/python/Doc/lib/libdl.tex
new file mode 100644
index 000000000..325724c84
--- /dev/null
+++ b/sys/src/cmd/python/Doc/lib/libdl.tex
@@ -0,0 +1,101 @@
+\section{\module{dl} ---
+ Call C functions in shared objects}
+\declaremodule{extension}{dl}
+ \platform{Unix} %?????????? Anyone????????????
+\sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il}
+\modulesynopsis{Call C functions in shared objects.}
+
+The \module{dl} module defines an interface to the
+\cfunction{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 \module{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
+\code{sizeof(int) == sizeof(long) == sizeof(char *)}
+If this is not the case, \exception{SystemError} will be raised on
+import.}
+
+The \module{dl} module defines the following function:
+
+\begin{funcdesc}{open}{name\optional{, mode\code{ = RTLD_LAZY}}}
+Open a shared object file, and return a handle. Mode
+signifies late binding (\constant{RTLD_LAZY}) or immediate binding
+(\constant{RTLD_NOW}). Default is \constant{RTLD_LAZY}. Note that some
+systems do not support \constant{RTLD_NOW}.
+
+Return value is a \class{dlobject}.
+\end{funcdesc}
+
+The \module{dl} module defines the following constants:
+
+\begin{datadesc}{RTLD_LAZY}
+Useful as an argument to \function{open()}.
+\end{datadesc}
+
+\begin{datadesc}{RTLD_NOW}
+Useful as an argument to \function{open()}. Note that on systems
+which do not support immediate binding, this constant will not appear
+in the module. For maximum portability, use \function{hasattr()} to
+determine if the system supports immediate binding.
+\end{datadesc}
+
+The \module{dl} module defines the following exception:
+
+\begin{excdesc}{error}
+Exception raised when an error has occurred inside the dynamic loading
+and linking routines.
+\end{excdesc}
+
+Example:
+
+\begin{verbatim}
+>>> import dl, time
+>>> a=dl.open('/lib/libc.so.6')
+>>> a.call('time'), time.time()
+(929723914, 929723914.498)
+\end{verbatim}
+
+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.
+
+\subsection{Dl Objects \label{dl-objects}}
+
+Dl objects, as returned by \function{open()} above, have the
+following methods:
+
+\begin{methoddesc}{close}{}
+Free all resources, except the memory.
+\end{methoddesc}
+
+\begin{methoddesc}{sym}{name}
+Return the pointer for the function named \var{name}, as a number, if
+it exists in the referenced shared object, otherwise \code{None}. This
+is useful in code like:
+
+\begin{verbatim}
+>>> if a.sym('time'):
+... a.call('time')
+... else:
+... time.time()
+\end{verbatim}
+
+(Note that this function will return a non-zero number, as zero is the
+\NULL{} pointer)
+\end{methoddesc}
+
+\begin{methoddesc}{call}{name\optional{, arg1\optional{, arg2\ldots}}}
+Call the function named \var{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 \code{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 \code{None}. The function's return value must be a C
+\ctype{long}, which is a Python integer.
+\end{methoddesc}