skip to navigation
skip to content

glibc 0.6.1

Pure-Python bindings to glibc (based on ctypes)

===============================================
Pure-Python bindings to glibc (based on ctypes)
===============================================

.. image:: https://badge.fury.io/py/glibc.png
:target: http://badge.fury.io/py/glibc

.. image:: https://travis-ci.org/zyga/python-glibc.png?branch=master
:target: https://travis-ci.org/zyga/python-glibc

.. image:: https://pypip.in/d/glibc/badge.png
:target: https://pypi.python.org/pypi/glibc

Features
========

* Free software: LGPLv3 license
* Works on python 2.7+ and python 3.2+ and pypy
* Currently exposes 23 low-level glibc functions (see below), 10 data types and
118 constants. All useful glibc features are in scope (patches welcome!)
* ``from glibc import ...`` -- direct access to glibc constants, functions and
types via lazy imports, fast startup, low memory overhead, efficient calls to
glibc
* Translates error codes according to documentation (manual pages) of each
supported function. Raises OSError with appropriate values and a customized,
easy-to-understand error message.
* Uses declarative "bindings", easy to verify for correctness, easy to add more
types, functions and constants. Built-in tests verify the value of each
constant, size and offset of each structure / union field and the size of the
whole structure / union.
* Adds high-level abstractions on top of raw functions (pyglibc.select,
pyglibc.signalfd, pyglibc.selectors, pyglibc.pthread_sigmask, pyglibc.pipe,
pyglibc.subreaper) so that using them is easier and more pythonic.
* This code is entirely optional and users can still call the low-level
C-equivalents directly.
* Where possible, existing Python APIs are followed so that glibc_select and
glibc_selectors are drop-in replacements for the select and selectors modules
from Python's standard library.

Functions
=========

The following glibc functions are supported

=========================== =================================
Name Remarks
=========================== =================================
``clock_getres(2)``
``clock_gettime(2)``
``clock_settime(2)``
``close(2)`` Same as os.close()
``dup(2)`` Same as os.dup()
``dup2(2)`` Same as os.dup2()
``dup3(2)`` Same as os.dup(flags=)
``epoll_create(2)`` Similar to select.epoll()
``epoll_create1(2)`` Similar to select.epoll()
``epoll_ctl(2)`` Similar to select.epoll.{register,unregister,modify}
``epoll_pwait(2)``
``epoll_wait(2)`` Similar to select.epoll.poll()
``eventfd(2)``
``eventfd_read(2)``
``eventfd_write(2)``
``pause(2)``
``pipe(2)`` Same as os.pipe
``pipe2(2)``
``prctl(2)``
``pthread_sigmask(2)``
``read(2)`` Unlike os.read, this one makes no copies
``sigaddset(3)``
``sigdelset(3)``
``sigemptyset(3)``
``sigfillset(3)``
``sigismember(3)``
``signalfd(2)``
``sigprocmask(2)``
``timerfd_create(2)``
``timerfd_gettime(2)``
``timerfd_settime(2)``


0.6.1 (2014-11-20)
==================

* Small change to internal APIs (no need to upgrade or there are no public API
changes).

0.6 (2014-11-09)
================

* Functions from the pthread library are now supported
* Added functions: ``read(2)``, ``pause(2)``, ``eventfd(2)``,
``eventfd_read(2)``, ``eventfd_write(2)``, ``clock_getres(2)``,
``clock_gettime(2)`` and ``clock_settime(2)``.
* Added constants: ``NSIG``, ``EFD_CLOEXEC``, ``EFD_NONBLOCK``,
``EFD_SEMAPHORE``, ``CLOCK_REALTIME``, ``CLOCK_MONOTONIC``,
``CLOCK_PROCESS_CPUTIME_ID``, ``CLOCK_THREAD_CPUTIME_ID``,
``CLOCK_MONOTONIC_RAW``, ``CLOCK_REALTIME_COARSE``,
``CLOCK_MONOTONIC_COARSE``, ``CLOCK_BOOTTIME``, ``CLOCK_REALTIME_ALARM``,
``CLOCK_BOOTTIME_ALARM``,
* Added new module :mod:`pyglibc.select` that contains a Python 2.7+ version of the
select.py from Python 3.4. This module contains a pure-python version of the
``epoll`` class. It may be used in place of the module from the standard
library if additional features are desired in a cross-python-version portable
manner.
* Added new module :mod:`pyglibc.selectors` that contains a Python 2.7+ version
of the selectors.py from Python 3.4. As with pyglibc.select, it can be used
in place of the original.
* Added new module :mod:`pyglibc._signalfd` that exposes ``signalfd(2)`` in a
much more pythonic way. Use signalfd as a file, as a context manager, inspect
it in pdb, all easily without having to browse through manual pages. It is
exposed as ``pyglibc.signalfd`` for easier importing.
* Added new module :mod:`pyglibc._pthread_sigmask` that exposes
``pthread_sigmask(2)`` in a much more pythonic way, making it a perfect
companion for the ``signalfd()`` class. It is exposed as
``pyglibc.pthread_sigmask`` for easier importing.
* Added new module :mod:`pyglibc._pipe` that expoes ``pipe2(2)`` in the same
way as Python 3.4 does via the ``os.pipe()`` and ``os.pipe2()`` functions.
* Added new module :mod:`pyglibc._subreaper` that adds pythonic API to
``prctl(PR_{GET,SET}_CHILD_SUBREAPER, ...)``. This module exposes a single
instance called ``subreaper``.

0.5 (2014-10-22)
================

* Added tests for structure / union size and offset of each field
* New feature, type aliases for non-compound types like ``time_t``.
* Added functions: ``prctl(2)``, ``timerfd_create(2)``, ``timerfd_settime(2)``,
``timerfd_gettime(2)``.
* Added constants: ``PR_SET_PDEATHSIG``, ``PR_GET_PDEATHSIG``,
``PR_GET_DUMPABLE``, ``PR_SET_DUMPABLE``, ``PR_GET_UNALIGN``,
``PR_SET_UNALIGN``, ``PR_GET_KEEPCAPS``, ``PR_SET_KEEPCAPS``,
``PR_GET_FPEMU``, ``PR_SET_FPEMU``, ``PR_GET_FPEXC``, ``PR_SET_FPEXC``,
``PR_GET_TIMING``, ``PR_SET_TIMING``, ``PR_SET_NAME``, ``PR_GET_NAME``,
``PR_GET_ENDIAN``, ``PR_SET_ENDIAN``, ``PR_GET_SECCOMP``, ``PR_SET_SECCOMP``,
``PR_CAPBSET_READ``, ``PR_CAPBSET_DROP``, ``PR_GET_TSC``, ``PR_SET_TSC``,
``PR_GET_SECUREBITS``, ``PR_SET_SECUREBITS``, ``PR_SET_TIMERSLACK``,
``PR_GET_TIMERSLACK``, ``PR_TASK_PERF_EVENTS_DISABLE``,
``PR_TASK_PERF_EVENTS_ENABLE``, ``PR_MCE_KILL``, ``PR_MCE_KILL_GET``,
``PR_SET_MM``, ``PR_SET_CHILD_SUBREAPER``, ``PR_GET_CHILD_SUBREAPER``,
``PR_SET_NO_NEW_PRIVS``, ``PR_GET_NO_NEW_PRIVS``, ``PR_GET_TID_ADDRESS``,
``PR_SET_THP_DISABLE``, ``PR_GET_THP_DISABLE``, ``PR_UNALIGN_NOPRINT``,
``PR_UNALIGN_SIGBUS``, ``PR_FPEMU_NOPRINT``, ``PR_FPEMU_SIGFPE``,
``PR_FP_EXC_SW_ENABLE``, ``PR_FP_EXC_DIV``, ``PR_FP_EXC_OVF``,
``PR_FP_EXC_UND``, ``PR_FP_EXC_RES``, ``PR_FP_EXC_INV``,
``PR_FP_EXC_DISABLED``, ``PR_FP_EXC_NONRECOV``, ``PR_FP_EXC_ASYNC``,
``PR_FP_EXC_PRECISE``, ``PR_TIMING_STATISTICAL``, ``PR_TIMING_TIMESTAMP``,
``PR_ENDIAN_BIG``, ``PR_ENDIAN_LITTLE``, ``PR_ENDIAN_PPC_LITTLE``,
``PR_TSC_ENABLE``, ``PR_TSC_SIGSEGV``, ``PR_MCE_KILL_CLEAR``,
``PR_MCE_KILL_SET``, ``PR_MCE_KILL_LATE``, ``PR_MCE_KILL_EARLY``,
``PR_MCE_KILL_DEFAULT``, ``PR_SET_MM_START_CODE``, ``PR_SET_MM_END_CODE``,
``PR_SET_MM_START_DATA``, ``PR_SET_MM_END_DATA``, ``PR_SET_MM_START_STACK``,
``PR_SET_MM_START_BRK``, ``PR_SET_MM_BRK``, ``PR_SET_MM_ARG_START``,
``PR_SET_MM_ARG_END``, ``PR_SET_MM_ENV_START``, ``PR_SET_MM_ENV_END``,
``PR_SET_MM_AUXV``, ``PR_SET_MM_EXE_FILE``, ``PR_SET_PTRACER``,
``PR_SET_PTRACER_ANY``, ``TFD_TIMER_ABSTIME``, ``TFD_CLOEXEC``
and ``TFD_NONBLOCK``,
* Added structures: ``struct itimerspec``, ``struct timespec`` and
``struct timeval``.
* Added type alias for ``time_t`` and ``suseconds_t``

0.4 (2014-10-21)
================

* Started tracking changes relevant to other people.
* First release with tests for constants and type sizes.
* Fixed issues with ``struct epoll_event`` (size mismatch).
* Added functions: ``close(2)``.
* Added constants: ``FD_SETSIZE``, ``EPOLLRDNORM``, ``EPOLLRDBAND``,
``EPOLLWRNORM``, ``EPOLLWRBAND``, ``EPOLLMSG``.
* Improved bundled demos (not part of release)  
File Type Py Version Uploaded on Size
glibc-0.6.1-py2.py3-none-any.whl (md5, pgp) Python Wheel 2.7 2014-11-20 34KB
glibc-0.6.1.tar.gz (md5, pgp) Source 2014-11-20 95KB