Старый буферный протокол

Не рекомендуется, начиная с версии 3.0.

Эти функции были частью API «старого буферного протокола» в Python 2. В Python 3 этот протокол больше не существует, но эти функции по-прежнему доступны для облегчения переноса кода версии 2.x. Они действуют как обертка совместимости вокруг new buffer protocol, но они не дают вам контроля над временем жизни ресурсов, полученных при экспорте буфера.

Поэтому рекомендуется вызывать PyObject_GetBuffer() (или y* или w* format codes с семейством функций PyArg_ParseTuple()) для получения буферного представления над объектом, и PyBuffer_Release(), когда буферное представление может быть освобождено.

int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)
Part of the Stable ABI.

Возвращает указатель на ячейку памяти, доступную только для чтения и используемую в качестве символьного ввода. Аргумент obj должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает 0, устанавливает buffer в место памяти и buffer_len в длину буфера. При ошибке возвращает -1 и устанавливает TypeError.

int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)
Part of the Stable ABI.

Возвращает указатель на участок памяти, доступный только для чтения, содержащий произвольные данные. Аргумент obj должен поддерживать интерфейс односегментного читаемого буфера. При успехе возвращает 0, устанавливает buffer в место памяти и buffer_len в длину буфера. При ошибке возвращает -1 и устанавливает TypeError.

int PyObject_CheckReadBuffer(PyObject *o)
Part of the Stable ABI.

Возвращает 1, если o поддерживает интерфейс односегментного читаемого буфера. В противном случае возвращается 0. Эта функция всегда успешна.

Обратите внимание, что эта функция пытается получить и освободить буфер, и исключения, возникающие при вызове соответствующих функций, будут подавлены. Для получения сообщений об ошибках используйте вместо этого PyObject_GetBuffer().

int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)
Part of the Stable ABI.

Возвращает указатель на записываемую область памяти. Аргумент obj должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает 0, устанавливает buffer в ячейку памяти и buffer_len в длину буфера. При ошибке возвращает -1 и устанавливает TypeError.

Вернуться на верх