objbuffer.html 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
  6. <meta property="og:title" content="Old Buffer Protocol" />
  7. <meta property="og:type" content="website" />
  8. <meta property="og:url" content="https://docs.python.org/3/c-api/objbuffer.html" />
  9. <meta property="og:site_name" content="Python documentation" />
  10. <meta property="og:description" content="These functions were part of the “old buffer protocol” API in Python 2. In Python 3, this protocol doesn’t exist anymore but the functions are still exposed to ease porting 2.x code. They act as a ..." />
  11. <meta property="og:image" content="https://docs.python.org/3/_static/og-image.png" />
  12. <meta property="og:image:alt" content="Python documentation" />
  13. <meta name="description" content="These functions were part of the “old buffer protocol” API in Python 2. In Python 3, this protocol doesn’t exist anymore but the functions are still exposed to ease porting 2.x code. They act as a ..." />
  14. <meta property="og:image:width" content="200" />
  15. <meta property="og:image:height" content="200" />
  16. <meta name="theme-color" content="#3776ab" />
  17. <title>Old Buffer Protocol &#8212; Python 3.12.0 documentation</title><meta name="viewport" content="width=device-width, initial-scale=1.0">
  18. <link rel="stylesheet" type="text/css" href="../_static/pygments.css" />
  19. <link rel="stylesheet" type="text/css" href="../_static/pydoctheme.css?digest=b37c26da2f7529d09fe70b41c4b2133fe4931a90" />
  20. <link id="pygments_dark_css" media="(prefers-color-scheme: dark)" rel="stylesheet" type="text/css" href="../_static/pygments_dark.css" />
  21. <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
  22. <script src="../_static/jquery.js"></script>
  23. <script src="../_static/underscore.js"></script>
  24. <script src="../_static/doctools.js"></script>
  25. <script src="../_static/sidebar.js"></script>
  26. <link rel="search" type="application/opensearchdescription+xml"
  27. title="Search within Python 3.12.0 documentation"
  28. href="../_static/opensearch.xml"/>
  29. <link rel="author" title="About these documents" href="../about.html" />
  30. <link rel="index" title="Index" href="../genindex.html" />
  31. <link rel="search" title="Search" href="../search.html" />
  32. <link rel="copyright" title="Copyright" href="../copyright.html" />
  33. <link rel="next" title="Concrete Objects Layer" href="concrete.html" />
  34. <link rel="prev" title="Buffer Protocol" href="buffer.html" />
  35. <link rel="canonical" href="https://docs.python.org/3/c-api/objbuffer.html" />
  36. <style>
  37. @media only screen {
  38. table.full-width-table {
  39. width: 100%;
  40. }
  41. }
  42. </style>
  43. <link rel="stylesheet" href="../_static/pydoctheme_dark.css" media="(prefers-color-scheme: dark)" id="pydoctheme_dark_css">
  44. <link rel="shortcut icon" type="image/png" href="../_static/py.svg" />
  45. <script type="text/javascript" src="../_static/copybutton.js"></script>
  46. <script type="text/javascript" src="../_static/menu.js"></script>
  47. <script type="text/javascript" src="../_static/themetoggle.js"></script>
  48. </head>
  49. <body>
  50. <div class="mobile-nav">
  51. <input type="checkbox" id="menuToggler" class="toggler__input" aria-controls="navigation"
  52. aria-pressed="false" aria-expanded="false" role="button" aria-label="Menu" />
  53. <nav class="nav-content" role="navigation">
  54. <label for="menuToggler" class="toggler__label">
  55. <span></span>
  56. </label>
  57. <span class="nav-items-wrapper">
  58. <a href="https://www.python.org/" class="nav-logo">
  59. <img src="../_static/py.svg" alt="Logo"/>
  60. </a>
  61. <span class="version_switcher_placeholder"></span>
  62. <form role="search" class="search" action="../search.html" method="get">
  63. <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" class="search-icon">
  64. <path fill-rule="nonzero" fill="currentColor" d="M15.5 14h-.79l-.28-.27a6.5 6.5 0 001.48-5.34c-.47-2.78-2.79-5-5.59-5.34a6.505 6.505 0 00-7.27 7.27c.34 2.8 2.56 5.12 5.34 5.59a6.5 6.5 0 005.34-1.48l.27.28v.79l4.25 4.25c.41.41 1.08.41 1.49 0 .41-.41.41-1.08 0-1.49L15.5 14zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"></path>
  65. </svg>
  66. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  67. <input type="submit" value="Go"/>
  68. </form>
  69. </span>
  70. </nav>
  71. <div class="menu-wrapper">
  72. <nav class="menu" role="navigation" aria-label="main navigation">
  73. <div class="language_switcher_placeholder"></div>
  74. <label class="theme-selector-label">
  75. Theme
  76. <select class="theme-selector" oninput="activateTheme(this.value)">
  77. <option value="auto" selected>Auto</option>
  78. <option value="light">Light</option>
  79. <option value="dark">Dark</option>
  80. </select>
  81. </label>
  82. <div>
  83. <h4>Previous topic</h4>
  84. <p class="topless"><a href="buffer.html"
  85. title="previous chapter">Buffer Protocol</a></p>
  86. </div>
  87. <div>
  88. <h4>Next topic</h4>
  89. <p class="topless"><a href="concrete.html"
  90. title="next chapter">Concrete Objects Layer</a></p>
  91. </div>
  92. <div role="note" aria-label="source link">
  93. <h3>This Page</h3>
  94. <ul class="this-page-menu">
  95. <li><a href="../bugs.html">Report a Bug</a></li>
  96. <li>
  97. <a href="https://github.com/python/cpython/blob/main/Doc/c-api/objbuffer.rst"
  98. rel="nofollow">Show Source
  99. </a>
  100. </li>
  101. </ul>
  102. </div>
  103. </nav>
  104. </div>
  105. </div>
  106. <div class="related" role="navigation" aria-label="related navigation">
  107. <h3>Navigation</h3>
  108. <ul>
  109. <li class="right" style="margin-right: 10px">
  110. <a href="../genindex.html" title="General Index"
  111. accesskey="I">index</a></li>
  112. <li class="right" >
  113. <a href="../py-modindex.html" title="Python Module Index"
  114. >modules</a> |</li>
  115. <li class="right" >
  116. <a href="concrete.html" title="Concrete Objects Layer"
  117. accesskey="N">next</a> |</li>
  118. <li class="right" >
  119. <a href="buffer.html" title="Buffer Protocol"
  120. accesskey="P">previous</a> |</li>
  121. <li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  122. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  123. <li class="switchers">
  124. <div class="language_switcher_placeholder"></div>
  125. <div class="version_switcher_placeholder"></div>
  126. </li>
  127. <li>
  128. </li>
  129. <li id="cpython-language-and-version">
  130. <a href="../index.html">3.12.0 Documentation</a> &#187;
  131. </li>
  132. <li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
  133. <li class="nav-item nav-item-2"><a href="abstract.html" accesskey="U">Abstract Objects Layer</a> &#187;</li>
  134. <li class="nav-item nav-item-this"><a href="">Old Buffer Protocol</a></li>
  135. <li class="right">
  136. <div class="inline-search" role="search">
  137. <form class="inline-search" action="../search.html" method="get">
  138. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  139. <input type="submit" value="Go" />
  140. </form>
  141. </div>
  142. |
  143. </li>
  144. <li class="right">
  145. <label class="theme-selector-label">
  146. Theme
  147. <select class="theme-selector" oninput="activateTheme(this.value)">
  148. <option value="auto" selected>Auto</option>
  149. <option value="light">Light</option>
  150. <option value="dark">Dark</option>
  151. </select>
  152. </label> |</li>
  153. </ul>
  154. </div>
  155. <div class="document">
  156. <div class="documentwrapper">
  157. <div class="bodywrapper">
  158. <div class="body" role="main">
  159. <section id="old-buffer-protocol">
  160. <h1>Old Buffer Protocol<a class="headerlink" href="#old-buffer-protocol" title="Permalink to this headline">¶</a></h1>
  161. <div class="deprecated">
  162. <p><span class="versionmodified deprecated">Deprecated since version 3.0.</span></p>
  163. </div>
  164. <p>These functions were part of the “old buffer protocol” API in Python 2.
  165. In Python 3, this protocol doesn’t exist anymore but the functions are still
  166. exposed to ease porting 2.x code. They act as a compatibility wrapper
  167. around the <a class="reference internal" href="buffer.html#bufferobjects"><span class="std std-ref">new buffer protocol</span></a>, but they don’t give
  168. you control over the lifetime of the resources acquired when a buffer is
  169. exported.</p>
  170. <p>Therefore, it is recommended that you call <a class="reference internal" href="buffer.html#c.PyObject_GetBuffer" title="PyObject_GetBuffer"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyObject_GetBuffer()</span></code></a>
  171. (or the <code class="docutils literal notranslate"><span class="pre">y*</span></code> or <code class="docutils literal notranslate"><span class="pre">w*</span></code> <a class="reference internal" href="arg.html#arg-parsing"><span class="std std-ref">format codes</span></a> with the
  172. <a class="reference internal" href="arg.html#c.PyArg_ParseTuple" title="PyArg_ParseTuple"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyArg_ParseTuple()</span></code></a> family of functions) to get a buffer view over
  173. an object, and <a class="reference internal" href="buffer.html#c.PyBuffer_Release" title="PyBuffer_Release"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyBuffer_Release()</span></code></a> when the buffer view can be released.</p>
  174. <dl class="c function">
  175. <dt class="sig sig-object c" id="c.PyObject_AsCharBuffer">
  176. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyObject_AsCharBuffer</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">obj</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">char</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span>, <a class="reference internal" href="intro.html#c.Py_ssize_t" title="Py_ssize_t"><span class="n"><span class="pre">Py_ssize_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer_len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_AsCharBuffer" title="Permalink to this definition">¶</a><br /></dt>
  177. <dd><em class="stableabi"> Part of the <a class="reference internal" href="stable.html#stable"><span class="std std-ref">Stable ABI</span></a>.</em><p>Returns a pointer to a read-only memory location usable as character-based
  178. input. The <em>obj</em> argument must support the single-segment character buffer
  179. interface. On success, returns <code class="docutils literal notranslate"><span class="pre">0</span></code>, sets <em>buffer</em> to the memory location
  180. and <em>buffer_len</em> to the buffer length. Returns <code class="docutils literal notranslate"><span class="pre">-1</span></code> and sets a
  181. <a class="reference internal" href="../library/exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> on error.</p>
  182. </dd></dl>
  183. <dl class="c function">
  184. <dt class="sig sig-object c" id="c.PyObject_AsReadBuffer">
  185. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyObject_AsReadBuffer</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">obj</span></span>, <span class="k"><span class="pre">const</span></span><span class="w"> </span><span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span>, <a class="reference internal" href="intro.html#c.Py_ssize_t" title="Py_ssize_t"><span class="n"><span class="pre">Py_ssize_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer_len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_AsReadBuffer" title="Permalink to this definition">¶</a><br /></dt>
  186. <dd><em class="stableabi"> Part of the <a class="reference internal" href="stable.html#stable"><span class="std std-ref">Stable ABI</span></a>.</em><p>Returns a pointer to a read-only memory location containing arbitrary data.
  187. The <em>obj</em> argument must support the single-segment readable buffer
  188. interface. On success, returns <code class="docutils literal notranslate"><span class="pre">0</span></code>, sets <em>buffer</em> to the memory location
  189. and <em>buffer_len</em> to the buffer length. Returns <code class="docutils literal notranslate"><span class="pre">-1</span></code> and sets a
  190. <a class="reference internal" href="../library/exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> on error.</p>
  191. </dd></dl>
  192. <dl class="c function">
  193. <dt class="sig sig-object c" id="c.PyObject_CheckReadBuffer">
  194. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyObject_CheckReadBuffer</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">o</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_CheckReadBuffer" title="Permalink to this definition">¶</a><br /></dt>
  195. <dd><em class="stableabi"> Part of the <a class="reference internal" href="stable.html#stable"><span class="std std-ref">Stable ABI</span></a>.</em><p>Returns <code class="docutils literal notranslate"><span class="pre">1</span></code> if <em>o</em> supports the single-segment readable buffer interface.
  196. Otherwise returns <code class="docutils literal notranslate"><span class="pre">0</span></code>. This function always succeeds.</p>
  197. <p>Note that this function tries to get and release a buffer, and exceptions
  198. which occur while calling corresponding functions will get suppressed.
  199. To get error reporting use <a class="reference internal" href="buffer.html#c.PyObject_GetBuffer" title="PyObject_GetBuffer"><code class="xref c c-func docutils literal notranslate"><span class="pre">PyObject_GetBuffer()</span></code></a> instead.</p>
  200. </dd></dl>
  201. <dl class="c function">
  202. <dt class="sig sig-object c" id="c.PyObject_AsWriteBuffer">
  203. <span class="kt"><span class="pre">int</span></span><span class="w"> </span><span class="sig-name descname"><span class="n"><span class="pre">PyObject_AsWriteBuffer</span></span></span><span class="sig-paren">(</span><a class="reference internal" href="structures.html#c.PyObject" title="PyObject"><span class="n"><span class="pre">PyObject</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">obj</span></span>, <span class="kt"><span class="pre">void</span></span><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer</span></span>, <a class="reference internal" href="intro.html#c.Py_ssize_t" title="Py_ssize_t"><span class="n"><span class="pre">Py_ssize_t</span></span></a><span class="w"> </span><span class="p"><span class="pre">*</span></span><span class="n"><span class="pre">buffer_len</span></span><span class="sig-paren">)</span><a class="headerlink" href="#c.PyObject_AsWriteBuffer" title="Permalink to this definition">¶</a><br /></dt>
  204. <dd><em class="stableabi"> Part of the <a class="reference internal" href="stable.html#stable"><span class="std std-ref">Stable ABI</span></a>.</em><p>Returns a pointer to a writable memory location. The <em>obj</em> argument must
  205. support the single-segment, character buffer interface. On success,
  206. returns <code class="docutils literal notranslate"><span class="pre">0</span></code>, sets <em>buffer</em> to the memory location and <em>buffer_len</em> to the
  207. buffer length. Returns <code class="docutils literal notranslate"><span class="pre">-1</span></code> and sets a <a class="reference internal" href="../library/exceptions.html#TypeError" title="TypeError"><code class="xref py py-exc docutils literal notranslate"><span class="pre">TypeError</span></code></a> on error.</p>
  208. </dd></dl>
  209. </section>
  210. <div class="clearer"></div>
  211. </div>
  212. </div>
  213. </div>
  214. <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
  215. <div class="sphinxsidebarwrapper">
  216. <div>
  217. <h4>Previous topic</h4>
  218. <p class="topless"><a href="buffer.html"
  219. title="previous chapter">Buffer Protocol</a></p>
  220. </div>
  221. <div>
  222. <h4>Next topic</h4>
  223. <p class="topless"><a href="concrete.html"
  224. title="next chapter">Concrete Objects Layer</a></p>
  225. </div>
  226. <div role="note" aria-label="source link">
  227. <h3>This Page</h3>
  228. <ul class="this-page-menu">
  229. <li><a href="../bugs.html">Report a Bug</a></li>
  230. <li>
  231. <a href="https://github.com/python/cpython/blob/main/Doc/c-api/objbuffer.rst"
  232. rel="nofollow">Show Source
  233. </a>
  234. </li>
  235. </ul>
  236. </div>
  237. </div>
  238. </div>
  239. <div class="clearer"></div>
  240. </div>
  241. <div class="related" role="navigation" aria-label="related navigation">
  242. <h3>Navigation</h3>
  243. <ul>
  244. <li class="right" style="margin-right: 10px">
  245. <a href="../genindex.html" title="General Index"
  246. >index</a></li>
  247. <li class="right" >
  248. <a href="../py-modindex.html" title="Python Module Index"
  249. >modules</a> |</li>
  250. <li class="right" >
  251. <a href="concrete.html" title="Concrete Objects Layer"
  252. >next</a> |</li>
  253. <li class="right" >
  254. <a href="buffer.html" title="Buffer Protocol"
  255. >previous</a> |</li>
  256. <li><img src="../_static/py.svg" alt="python logo" style="vertical-align: middle; margin-top: -1px"/></li>
  257. <li><a href="https://www.python.org/">Python</a> &#187;</li>
  258. <li class="switchers">
  259. <div class="language_switcher_placeholder"></div>
  260. <div class="version_switcher_placeholder"></div>
  261. </li>
  262. <li>
  263. </li>
  264. <li id="cpython-language-and-version">
  265. <a href="../index.html">3.12.0 Documentation</a> &#187;
  266. </li>
  267. <li class="nav-item nav-item-1"><a href="index.html" >Python/C API Reference Manual</a> &#187;</li>
  268. <li class="nav-item nav-item-2"><a href="abstract.html" >Abstract Objects Layer</a> &#187;</li>
  269. <li class="nav-item nav-item-this"><a href="">Old Buffer Protocol</a></li>
  270. <li class="right">
  271. <div class="inline-search" role="search">
  272. <form class="inline-search" action="../search.html" method="get">
  273. <input placeholder="Quick search" aria-label="Quick search" type="search" name="q" />
  274. <input type="submit" value="Go" />
  275. </form>
  276. </div>
  277. |
  278. </li>
  279. <li class="right">
  280. <label class="theme-selector-label">
  281. Theme
  282. <select class="theme-selector" oninput="activateTheme(this.value)">
  283. <option value="auto" selected>Auto</option>
  284. <option value="light">Light</option>
  285. <option value="dark">Dark</option>
  286. </select>
  287. </label> |</li>
  288. </ul>
  289. </div>
  290. <div class="footer">
  291. &copy; <a href="../copyright.html">Copyright</a> 2001-2023, Python Software Foundation.
  292. <br />
  293. This page is licensed under the Python Software Foundation License Version 2.
  294. <br />
  295. Examples, recipes, and other code in the documentation are additionally licensed under the Zero Clause BSD License.
  296. <br />
  297. See <a href="/license.html">History and License</a> for more information.<br />
  298. <br />
  299. The Python Software Foundation is a non-profit corporation.
  300. <a href="https://www.python.org/psf/donations/">Please donate.</a>
  301. <br />
  302. <br />
  303. Last updated on Oct 02, 2023.
  304. <a href="/bugs.html">Found a bug</a>?
  305. <br />
  306. Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 4.5.0.
  307. </div>
  308. </body>
  309. </html>