objbuffer.md
1> **Источник:** https://python-all.ru/2.7/c-api/objbuffer.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Старый буферный протокол89В этом разделе описывается устаревший буферный протокол, который был введён в Python 1.6. Он всё ещё поддерживается, но считается устаревшим в серии Python 2.x. Python 3 вводит новый буферный протокол, который устраняет недостатки и слабости прежнего протокола и был портирован обратно в Python 2.6. См. [Буферы и объекты Memoryview](https://python-all.ru/2.7/c-api/buffer.html#bufferobjects) для получения дополнительной информации.1011#### `int PyObject_AsCharBuffer(PyObject *obj, const char **buffer, Py_ssize_t *buffer_len)`1213Возвращает указатель на область памяти только для чтения, пригодную для ввода на основе символов. Аргумент *obj* должен поддерживать интерфейс односегментного символьного буфера. При успехе возвращает `0`, устанавливает *buffer* на эту область памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).1415Новое в версии 1.6.1617Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Возможно, потребуется внести изменения в код для правильной поддержки 64-битных систем.1819#### `int PyObject_AsReadBuffer(PyObject *obj, const void **buffer, Py_ssize_t *buffer_len)`2021Возвращает указатель на область памяти только для чтения, содержащую произвольные данные. Аргумент *obj* должен поддерживать интерфейс односегментного читаемого буфера. При успехе возвращает `0`, устанавливает *buffer* на эту область памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).2223Новое в версии 1.6.2425Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Возможно, потребуется внести изменения в код для правильной поддержки 64-битных систем.2627#### `int PyObject_CheckReadBuffer(PyObject *o)`2829Возвращает `1`, если *o* поддерживает интерфейс односегментного читаемого буфера. В противном случае возвращает `0`.3031Новое в версии 2.2.3233#### `int PyObject_AsWriteBuffer(PyObject *obj, void **buffer, Py_ssize_t *buffer_len)`3435Возвращает указатель на доступную для записи область памяти. Аргумент *obj* должен поддерживать односегментный символьный буферный интерфейс. В случае успеха возвращает `0`, устанавливает *buffer* на адрес памяти, а *buffer\_len* – на длину буфера. В случае ошибки возвращает `-1` и устанавливает [`TypeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.TypeError).3637Новое в версии 1.6.3839Изменено в версии 2.5: Эта функция использовала тип `int *` для *buffer\_len*. Возможно, потребуется внести изменения в код для правильной поддержки 64-битных систем.40