Старый буферный протокол¶
Не рекомендуется, начиная с версии 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 Стабильный ABI.
Возвращает указатель на область памяти, доступную только для чтения, которую можно использовать в качестве символьного ввода. Аргумент obj должен поддерживать интерфейс односегментного символьного буфера. В случае успеха возвращает
0
, присваивает buffer значение ячейки памяти и buffer_len значение длины буфера. Возвращает-1
и присваивает значениеTypeError
при ошибке.
-
int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)¶
- Part of the Стабильный ABI.
Возвращает указатель на доступную только для чтения ячейку памяти, содержащую произвольные данные. Аргумент obj должен поддерживать интерфейс буфера для чтения из одного сегмента. В случае успеха возвращает
0
, присваивает buffer значение ячейки памяти и buffer_len значение длины буфера. Возвращает-1
и присваивает значениеTypeError
при ошибке.
-
int PyObject_CheckReadBuffer(PyObject *o)¶
- Part of the Стабильный ABI.
Возвращает
1
, если o поддерживает интерфейс буфера для чтения с одним сегментом. В противном случае возвращает0
. Эта функция всегда выполняется успешно.Обратите внимание, что эта функция пытается получить и освободить буфер, и исключения, возникающие при вызове соответствующих функций, будут подавлены. Чтобы получить сообщение об ошибке, используйте вместо этого
PyObject_GetBuffer()
.
-
int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)¶
- Part of the Стабильный ABI.
Возвращает указатель на область памяти, доступную для записи. Аргумент obj должен поддерживать односегментный интерфейс символьного буфера. В случае успеха возвращает
0
, присваивает buffer значение области памяти, а buffer_len - длину буфера. Возвращает-1
и устанавливает значениеTypeError
при ошибке.