Старый протокол буферизации

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

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

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

int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)

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

int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)

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

int PyObject_CheckReadBuffer(PyObject *o)

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

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

int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)

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