> **Источник:** https://python-all.ru/2.7/c-api/objbuffer.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

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

В этом разделе описывается устаревший буферный протокол, который был введён в Python 1.6. Он всё ещё поддерживается, но считается устаревшим в серии Python 2.x. Python 3 вводит новый буферный протокол, который устраняет недостатки и слабости прежнего протокола и был портирован обратно в Python 2.6. См. [Буферы и объекты Memoryview](https://python-all.ru/2.7/c-api/buffer.html#bufferobjects) для получения дополнительной информации.

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

Возвращает указатель на область памяти только для чтения, пригодную для ввода на основе символов. Аргумент *obj* должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает `0`, устанавливает *buffer* на эту область памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).

Новое в версии 1.6.

Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Возможно, потребуется внести изменения в код для правильной поддержки 64-битных систем.

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

Возвращает указатель на область памяти только для чтения, содержащую произвольные данные. Аргумент *obj* должен поддерживать интерфейс односегментного читаемого буфера. При успехе возвращает `0`, устанавливает *buffer* на эту область памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).

Новое в версии 1.6.

Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Возможно, потребуется внести изменения в код для правильной поддержки 64-битных систем.

#### `int PyObject_CheckReadBuffer(PyObject *o)`

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

Новое в версии 2.2.

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

Возвращает указатель на доступную для записи область памяти. Аргумент *obj* должен поддерживать односегментный символьный буферный интерфейс. В случае успеха возвращает `0`, устанавливает *buffer* на адрес памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).

Новое в версии 1.6.

Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Возможно, потребуется внести изменения в код для правильной поддержки 64-битных систем.
