#include <Python.h> #include <semaphore.h> static int parse_sem_t(PyObject *object, void *address) { *((sem_t **)address) = PyLong_AsVoidPtr(object); return 1; } static PyObject * namedsem_sem_open(PyObject *self, PyObject *args) { const char *name; int oflag; unsigned int value; sem_t *result; PyArg_ParseTuple(args, "siI", &name, &oflag, &value); result = sem_open(name, oflag, 0600, value); return PyLong_FromVoidPtr(result); } static PyObject * namedsem_sem_close(PyObject *self, PyObject *args) { sem_t *sem; int result; PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem); result = sem_close(sem); return Py_BuildValue("i", result); } static PyObject * namedsem_sem_unlink(PyObject *self, PyObject *args) { const char *name; int result; PyArg_ParseTuple(args, "s", &name); result = sem_unlink(name); return Py_BuildValue("i", result); } static PyObject * namedsem_sem_wait(PyObject *self, PyObject *args) { sem_t *sem; int result; PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem); result = sem_wait(sem); return Py_BuildValue("i", result); } static PyObject * namedsem_sem_post(PyObject *self, PyObject *args) { sem_t *sem; int result; PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem); result = sem_post(sem); return Py_BuildValue("i", result); } static PyObject * namedsem_sem_getvalue(PyObject *self, PyObject *args) { sem_t *sem; int sval; PyArg_ParseTuple(args, "O&", &parse_sem_t, &sem); sem_getvalue(sem, &sval); return Py_BuildValue("i", sval); } static PyMethodDef NamedsemMethods[] = { {"sem_open", namedsem_sem_open, METH_VARARGS, "Execute sem_open()."}, {"sem_close", namedsem_sem_close, METH_VARARGS, "Execute sem_close()."}, {"sem_unlink", namedsem_sem_unlink, METH_VARARGS, "Execute sem_unlink()."}, {"sem_wait", namedsem_sem_wait, METH_VARARGS, "Execute sem_wait()."}, {"sem_post", namedsem_sem_post, METH_VARARGS, "Execute sem_post()."}, {"sem_getvalue", namedsem_sem_getvalue, METH_VARARGS, "Execute sem_getvalue()."}, {NULL, NULL, 0, NULL} }; PyMODINIT_FUNC initnamedsem(void) { PyObject *module; module = Py_InitModule("namedsem", NamedsemMethods); PyModule_AddIntConstant(module, "SEM_FAILED", (long)SEM_FAILED); }