114 lines
8.4 KiB
HTML
114 lines
8.4 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh" dir="ltr" class="client-nojs" xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh">
|
|
<head><meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
<title>std::setbuf</title>
|
|
<link rel="stylesheet" href="ext.css" />
|
|
<link rel="stylesheet" href="site_modules.css" />
|
|
</head>
|
|
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-cpp_io_c_setbuf skin-cppreference2 action-view cpp-navbar">
|
|
<div id="cpp-content-base">
|
|
<div id="content"><a id="top"></a>
|
|
<h1 id="firstHeading" class="firstHeading"><span style="font-size:0.7em; line-height:130%">std::</span>setbuf</h1>
|
|
<div id="bodyContent">
|
|
<div id="contentSub"><span class="subpages">< <a href="cpp.html">cpp</a>‎ | <a href="cpp-io.html">io</a>‎ | <a href="cpp-io-c.html">c</a></span></div>
|
|
<div id="mw-content-text" lang="zh" dir="ltr" class="mw-content-ltr" xml:lang="zh">
|
|
<table class="t-dcl-begin">
|
|
<tbody>
|
|
<tr class="t-dsc-header">
|
|
<td>
|
|
<div>定义于头文件 <code><a href="cpp-header-cstdio.html"><cstdio></a></code></div>
|
|
</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="t-dcl">
|
|
<td class="t-dcl-nopad">
|
|
<div><span class="mw-geshi cpp source-cpp"><span class="kw4">void</span> setbuf<span class="br0">(</span> <a href="cpp-io-c.html"><span class="kw1876">std::<span class="me2">FILE</span></span></a><span class="sy2">*</span> stream, <span class="kw4">char</span><span class="sy2">*</span> buffer <span class="br0">)</span><span class="sy4">;</span></span></div>
|
|
</td>
|
|
<td class="t-dcl-nopad"></td>
|
|
<td class="t-dcl-nopad"></td>
|
|
</tr>
|
|
<tr class="t-dcl-sep">
|
|
<td></td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>为 C 流 <code>stream</code> 上进行的 I/O 操作设置内部缓冲区。</p>
|
|
<p>若 <code>buffer</code> 非空,则等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-c-setvbuf.html"><span class="kw1817">std::<span class="me2">setvbuf</span></span></a><span class="br0">(</span>stream, buffer, <a href="cpp-io-c.html"><span class="kw1885">_IOFBF</span></a>, <a href="cpp-io-c.html"><span class="kw1884">BUFSIZ</span></a><span class="br0">)</span></span></span> 。</p>
|
|
<p>若 <code>buffer</code> 为空,则等价于 <span class="t-c"><span class="mw-geshi cpp source-cpp"><a href="cpp-io-c-setvbuf.html"><span class="kw1817">std::<span class="me2">setvbuf</span></span></a><span class="br0">(</span>stream, <a href="cpp-types-NULL.html"><span class="kw103">NULL</span></a>, <a href="cpp-io-c.html"><span class="kw1887">_IONBF</span></a>, <span class="nu0">0</span><span class="br0">)</span></span></span> ,这会关闭缓冲。</p>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E6.95.B0">参数</span></h3>
|
|
<table class="t-par-begin">
|
|
<tr class="t-par">
|
|
<td>stream</td>
|
|
<td>-</td>
|
|
<td>要设置缓冲区的文件流</td>
|
|
</tr>
|
|
<tr class="t-par">
|
|
<td>buffer</td>
|
|
<td>-</td>
|
|
<td>指向文件流所用的缓冲区的指针。若提供空指针,则关闭缓冲。若它非空,则数组必须足以保有至少 <code>BUFSIZ</code> 个字符</td>
|
|
</tr>
|
|
</table>
|
|
<h3><span class="mw-headline" id=".E8.BF.94.E5.9B.9E.E5.80.BC">返回值</span></h3>
|
|
<p>(无)</p>
|
|
<h3><span class="mw-headline" id=".E6.B3.A8.E8.A7.A3">注解</span></h3>
|
|
<p>若 <span class="t-lc"><a href="cpp-io-c.html">BUFSIZ</a></span> 不是适合的缓冲区大小,则能用 <span class="t-lc"><a href="cpp-io-c-setvbuf.html">std::setvbuf</a></span> 更改它。</p>
|
|
<p><span class="t-lc"><a href="cpp-io-c-setvbuf.html">std::setvbuf</a></span> 亦应当用于检测错误,因为 <code>std::setbuf</code> 不指示成功或失败。</p>
|
|
<p>此函数仅可在已将 <code>stream</code> 关联到打开的文件后,但要在任何其他操作(除了对 <span class="t-lc"><strong class="selflink">std::setbuf</strong></span>/<code>std::setvbuf</code> 的失败调用)前使用。</p>
|
|
<p>一个常见错误是设置 stdin 或 stdout 的缓冲区为生存期在程序终止前结束的数组:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>
|
|
<span class="kw4">char</span> buf<span class="br0">[</span><a href="cpp-io-c.html"><span class="kw1884">BUFSIZ</span></a><span class="br0">]</span><span class="sy4">;</span>
|
|
std<span class="sy4">::</span><span class="me2">setbuf</span><span class="br0">(</span><span class="kw2">stdin</span>, buf<span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span> <span class="co1">// buf 的生存期结束,未定义行为</span></pre></div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E7.A4.BA.E4.BE.8B">示例</span></h3>
|
|
<div class="t-example">
|
|
<p>setbuf 可用于禁用要求立即输出的流上的缓冲</p>
|
|
<div class="t-example-live-link"></div>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="cpp source-cpp">
|
|
<pre class="de1"><span class="co2">#include <cstdio></span>
|
|
<span class="co2">#include <thread></span>
|
|
<span class="co2">#include <chrono></span>
|
|
|
|
<span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span>
|
|
<span class="br0">{</span>
|
|
<span class="kw1">using</span> <span class="kw1">namespace</span> std<span class="sy4">::</span><span class="me2">chrono_literals</span><span class="sy4">;</span>
|
|
|
|
std<span class="sy4">::</span><span class="me2">setbuf</span><span class="br0">(</span><span class="kw2">stdout</span>, <a href="cpp-types-NULL.html"><span class="kw103">NULL</span></a><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 无缓冲的 stdout</span>
|
|
<a href="cpp-io-c-putchar.html"><span class="kw1828">std::<span class="me2">putchar</span></span></a><span class="br0">(</span><span class="st0">'a'</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// 在无缓冲的流上立即显现</span>
|
|
<a href="cpp-thread-sleep_for.html"><span class="kw2148">std::<span class="me2">this_thread</span><span class="sy4">::</span><span class="me2">sleep_for</span></span></a><span class="br0">(</span>1s<span class="br0">)</span><span class="sy4">;</span>
|
|
<a href="cpp-io-c-putchar.html"><span class="kw1828">std::<span class="me2">putchar</span></span></a><span class="br0">(</span><span class="st0">'b'</span><span class="br0">)</span><span class="sy4">;</span>
|
|
<span class="br0">}</span></pre></div>
|
|
</div>
|
|
<p>输出:</p>
|
|
<div dir="ltr" class="mw-geshi" style="text-align: left;">
|
|
<div class="text source-text">
|
|
<pre class="de1">ab</pre></div>
|
|
</div>
|
|
</div>
|
|
<h3><span class="mw-headline" id=".E5.8F.82.E9.98.85">参阅</span></h3>
|
|
<table class="t-dsc-begin">
|
|
<tr class="t-dsc">
|
|
<td>
|
|
<div class="t-dsc-member-div">
|
|
<div><a href="cpp-io-c-setvbuf.html"><span class="t-lines"><span>setvbuf</span></span></a></div>
|
|
</div>
|
|
</td>
|
|
<td>为文件流设置缓冲区与其大小<br />
|
|
<span class="t-mark">(函数)</span></td>
|
|
</tr>
|
|
</table>
|
|
</div>
|
|
<div class="visualClear"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</body>
|
|
</html>
|