| #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); |
| } |