Старый протокол буферизации¶
Не рекомендуется, начиная с версии 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
при ошибке.