• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>File</title>
5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../../index.html" title="Chapter 1. Boost.Beast">
8<link rel="up" href="../concepts.html" title="Concepts">
9<link rel="prev" href="FieldsWriter.html" title="FieldsWriter">
10<link rel="next" href="RatePolicy.html" title="RatePolicy">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="FieldsWriter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="RatePolicy.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h3 class="title">
27<a name="beast.concepts.File"></a><a class="link" href="File.html" title="File">File</a>
28</h3></div></div></div>
29<p>
30        The <span class="bold"><strong>File</strong></span> concept abstracts access to files
31        in the underlying file system. To support other platform interfaces, users
32        may author their own <span class="bold"><strong>File</strong></span> types which meet
33        these requirements.
34      </p>
35<h5>
36<a name="beast.concepts.File.h0"></a>
37        <span class="phrase"><a name="beast.concepts.File.associated_types"></a></span><a class="link" href="File.html#beast.concepts.File.associated_types">Associated
38        Types</a>
39      </h5>
40<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
41<li class="listitem">
42            <a class="link" href="../ref/boost__beast__file_mode.html" title="file_mode"><code class="computeroutput"><span class="identifier">file_mode</span></code></a>
43          </li>
44<li class="listitem">
45            <a class="link" href="../ref/boost__beast__is_file.html" title="is_file"><code class="computeroutput"><span class="identifier">is_file</span></code></a>
46          </li>
47</ul></div>
48<h5>
49<a name="beast.concepts.File.h1"></a>
50        <span class="phrase"><a name="beast.concepts.File.requirements"></a></span><a class="link" href="File.html#beast.concepts.File.requirements">Requirements</a>
51      </h5>
52<p>
53        In this table:
54      </p>
55<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
56<li class="listitem">
57            <code class="computeroutput"><span class="identifier">F</span></code> is a <span class="bold"><strong>File</strong></span>
58            type
59          </li>
60<li class="listitem">
61            <code class="computeroutput"><span class="identifier">f</span></code> is an instance of
62            <code class="computeroutput"><span class="identifier">F</span></code>
63          </li>
64<li class="listitem">
65            <code class="computeroutput"><span class="identifier">p</span></code> is a value of type
66            <code class="computeroutput"><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span></code> which points to a null terminated utf-8
67            encoded string.
68          </li>
69<li class="listitem">
70            <code class="computeroutput"><span class="identifier">m</span></code> is an instance of
71            <a class="link" href="../ref/boost__beast__file_mode.html" title="file_mode"><code class="computeroutput"><span class="identifier">file_mode</span></code></a>
72          </li>
73<li class="listitem">
74            <code class="computeroutput"><span class="identifier">n</span></code> is a number of bytes,
75            convertible to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
76          </li>
77<li class="listitem">
78            <code class="computeroutput"><span class="identifier">o</span></code> is a byte offset in
79            the file, convertible to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uint64_t</span></code>
80          </li>
81<li class="listitem">
82            <code class="computeroutput"><span class="identifier">b</span></code> is any non-const pointer
83            to memory
84          </li>
85<li class="listitem">
86            <code class="computeroutput"><span class="identifier">c</span></code> is any possibly-const
87            pointer to memory
88          </li>
89<li class="listitem">
90            <code class="computeroutput"><span class="identifier">ec</span></code> is a reference of
91            type <a class="link" href="../ref/boost__beast__error_code.html" title="error_code"><code class="computeroutput"><span class="identifier">error_code</span></code></a>
92          </li>
93</ul></div>
94<div class="table">
95<a name="beast.concepts.File.valid_expressions"></a><p class="title"><b>Table 1.43. Valid expressions</b></p>
96<div class="table-contents"><table class="table" summary="Valid expressions">
97<colgroup>
98<col>
99<col>
100<col>
101</colgroup>
102<thead><tr>
103<th>
104                <p>
105                  Expression
106                </p>
107              </th>
108<th>
109                <p>
110                  Type
111                </p>
112              </th>
113<th>
114                <p>
115                  Semantics, Pre/Post-conditions
116                </p>
117              </th>
118</tr></thead>
119<tbody>
120<tr>
121<td>
122                <p>
123                  Operation
124                </p>
125              </td>
126<td>
127                <p>
128                  Return Type
129                </p>
130              </td>
131<td>
132                <p>
133                  Semantics, Pre/Post-conditions
134                </p>
135              </td>
136</tr>
137<tr>
138<td>
139                <p>
140                  <code class="computeroutput"><span class="identifier">F</span><span class="special">()</span></code>
141                </p>
142              </td>
143<td>
144              </td>
145<td>
146                <p>
147                  Default constructable
148                </p>
149              </td>
150</tr>
151<tr>
152<td>
153                <p>
154                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.~</span><span class="identifier">F</span><span class="special">()</span></code>
155                </p>
156              </td>
157<td>
158              </td>
159<td>
160                <p>
161                  Destructible. If <code class="computeroutput"><span class="identifier">f</span></code>
162                  refers to an open file, it is first closed as if by a call to
163                  <code class="computeroutput"><span class="identifier">close</span></code> with the
164                  error ignored.
165                </p>
166              </td>
167</tr>
168<tr>
169<td>
170                <p>
171                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">()</span></code>
172                </p>
173              </td>
174<td>
175                <p>
176                  <code class="computeroutput"><span class="keyword">bool</span></code>
177                </p>
178              </td>
179<td>
180                <p>
181                  Returns <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="identifier">f</span></code> refers to an open file, <code class="computeroutput"><span class="keyword">false</span></code> otherwise.
182                </p>
183              </td>
184</tr>
185<tr>
186<td>
187                <p>
188                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">close</span><span class="special">(</span><span class="identifier">ec</span><span class="special">)</span></code>
189                </p>
190              </td>
191<td>
192              </td>
193<td>
194                <p>
195                  If <code class="computeroutput"><span class="identifier">f</span></code> refers to
196                  an open file, this function attempts to close the file. Regardless
197                  of whether an error occurs or not, a subsequent call to <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">()</span></code>
198                  will return <code class="computeroutput"><span class="keyword">false</span></code>.
199                  The function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
200                  if there was no error or set to the appropriate error code if an
201                  error occurred.
202                </p>
203              </td>
204</tr>
205<tr>
206<td>
207                <p>
208                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">open</span><span class="special">(</span><span class="identifier">p</span><span class="special">,</span><span class="identifier">m</span><span class="special">,</span><span class="identifier">ec</span><span class="special">)</span></code>
209                </p>
210              </td>
211<td>
212              </td>
213<td>
214                <p>
215                  Attempts to open the file at the path specified by <code class="computeroutput"><span class="identifier">p</span></code> with the mode specified by
216                  <code class="computeroutput"><span class="identifier">m</span></code>. Upon success,
217                  a subsequent call to <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">is_open</span><span class="special">()</span></code> will return <code class="computeroutput"><span class="keyword">true</span></code>.
218                  If <code class="computeroutput"><span class="identifier">f</span></code> refers to
219                  an open file, it is first closed as if by a call to <code class="computeroutput"><span class="identifier">close</span></code> with the error ignored.
220                  The function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
221                  if there was no error or set to the appropriate error code if an
222                  error occurred.
223                </p>
224              </td>
225</tr>
226<tr>
227<td>
228                <p>
229                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">size</span><span class="special">(</span><span class="identifier">ec</span><span class="special">)</span></code>
230                </p>
231              </td>
232<td>
233                <p>
234                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uint64_t</span></code>
235                </p>
236              </td>
237<td>
238                <p>
239                  If <code class="computeroutput"><span class="identifier">f</span></code> refers to
240                  an open file, this function attempts to determine the file size
241                  and return its value. If <code class="computeroutput"><span class="identifier">f</span></code>
242                  does not refer to an open file, the function will set <code class="computeroutput"><span class="identifier">ec</span></code> to <code class="computeroutput"><span class="identifier">errc</span><span class="special">::</span><span class="identifier">invalid_argument</span></code>
243                  and return 0. The function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
244                  if there was no error or set to the appropriate error code if an
245                  error occurred.
246                </p>
247              </td>
248</tr>
249<tr>
250<td>
251                <p>
252                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">pos</span><span class="special">(</span><span class="identifier">ec</span><span class="special">)</span></code>
253                </p>
254              </td>
255<td>
256                <p>
257                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">uint64_t</span></code>
258                </p>
259              </td>
260<td>
261                <p>
262                  If <code class="computeroutput"><span class="identifier">f</span></code> refers to
263                  an open file, this function attempts to determine the current file
264                  offset and return it. If <code class="computeroutput"><span class="identifier">f</span></code>
265                  does not refer to an open file, the function will set <code class="computeroutput"><span class="identifier">ec</span></code> to <code class="computeroutput"><span class="identifier">errc</span><span class="special">::</span><span class="identifier">invalid_argument</span></code>
266                  and return 0. The function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
267                  if there was no error or set to the appropriate error code if an
268                  error occurred.
269                </p>
270              </td>
271</tr>
272<tr>
273<td>
274                <p>
275                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">seek</span><span class="special">(</span><span class="identifier">o</span><span class="special">,</span><span class="identifier">ec</span><span class="special">)</span></code>
276                </p>
277              </td>
278<td>
279              </td>
280<td>
281                <p>
282                  Attempts to reposition the current file offset to the value <code class="computeroutput"><span class="identifier">o</span></code>, which represents a byte offset
283                  relative to the beginning of the file. If <code class="computeroutput"><span class="identifier">f</span></code>
284                  does not refer to an open file, the function will set <code class="computeroutput"><span class="identifier">ec</span></code> to <code class="computeroutput"><span class="identifier">errc</span><span class="special">::</span><span class="identifier">invalid_argument</span></code>
285                  and return immediately. The function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code>
286                  is <code class="computeroutput"><span class="keyword">true</span></code> if there was
287                  no error or set to the appropriate error code if an error occurred.
288                </p>
289              </td>
290</tr>
291<tr>
292<td>
293                <p>
294                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">read</span><span class="special">(</span><span class="identifier">b</span><span class="special">,</span><span class="identifier">n</span><span class="special">,</span><span class="identifier">ec</span><span class="special">)</span></code>
295                </p>
296              </td>
297<td>
298                <p>
299                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
300                </p>
301              </td>
302<td>
303                <p>
304                  Attempts to read <code class="computeroutput"><span class="identifier">n</span></code>
305                  bytes starting at the current file offset from the open file referred
306                  to by <code class="computeroutput"><span class="identifier">f</span></code>. Bytes
307                  read are stored in the memory buffer at address <code class="computeroutput"><span class="identifier">b</span></code>
308                  which must be at least <code class="computeroutput"><span class="identifier">n</span></code>
309                  bytes in size. The function advances the file offset by the amount
310                  read, and returns the number of bytes actually read, which may
311                  be less than <code class="computeroutput"><span class="identifier">n</span></code>.
312                  If <code class="computeroutput"><span class="identifier">f</span></code> does not refer
313                  to an open file, the function will set <code class="computeroutput"><span class="identifier">ec</span></code>
314                  to <code class="computeroutput"><span class="identifier">errc</span><span class="special">::</span><span class="identifier">invalid_argument</span></code> and return immediately.
315                  The function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
316                  if there was no error or set to the appropriate error code if an
317                  error occurred. If an end-of-file condition is detected prior to
318                  reading any bytes, the function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code>
319                  is <code class="computeroutput"><span class="keyword">true</span></code> and the return
320                  value shall be 0.
321                </p>
322              </td>
323</tr>
324<tr>
325<td>
326                <p>
327                  <code class="computeroutput"><span class="identifier">f</span><span class="special">.</span><span class="identifier">write</span><span class="special">(</span><span class="identifier">c</span><span class="special">,</span><span class="identifier">n</span><span class="special">,</span><span class="identifier">ec</span><span class="special">)</span></code>
328                </p>
329              </td>
330<td>
331                <p>
332                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span></code>
333                </p>
334              </td>
335<td>
336                <p>
337                  Attempts to write <code class="computeroutput"><span class="identifier">n</span></code>
338                  bytes from the buffer pointed to by <code class="computeroutput"><span class="identifier">c</span></code>
339                  to the current file offset of the open file referred to by <code class="computeroutput"><span class="identifier">f</span></code>. The memory buffer at <code class="computeroutput"><span class="identifier">c</span></code> must point to storage of at
340                  least <code class="computeroutput"><span class="identifier">n</span></code> bytes meant
341                  to be copied to the file. The function advances the file offset
342                  by the amount written, and returns the number of bytes actually
343                  written, which may be less than <code class="computeroutput"><span class="identifier">n</span></code>.
344                  If <code class="computeroutput"><span class="identifier">f</span></code> does not refer
345                  to an open file, the function will set <code class="computeroutput"><span class="identifier">ec</span></code>
346                  to <code class="computeroutput"><span class="identifier">errc</span><span class="special">::</span><span class="identifier">invalid_argument</span></code> and return immediately.
347                  The function will ensure that <code class="computeroutput"><span class="special">!</span><span class="identifier">ec</span></code> is <code class="computeroutput"><span class="keyword">true</span></code>
348                  if there was no error or set to the appropriate error code if an
349                  error occurred.
350                </p>
351              </td>
352</tr>
353</tbody>
354</table></div>
355</div>
356<br class="table-break"><h5>
357<a name="beast.concepts.File.h2"></a>
358        <span class="phrase"><a name="beast.concepts.File.exemplar"></a></span><a class="link" href="File.html#beast.concepts.File.exemplar">Exemplar</a>
359      </h5>
360<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">File</span>
361<span class="special">{</span>
362    <span class="comment">/** Default constructor
363
364        There is no open file initially.
365    */</span>
366    <span class="identifier">File</span><span class="special">();</span>
367
368    <span class="comment">/** Destructor
369
370        If the file is open it is first closed.
371    */</span>
372    <span class="special">~</span><span class="identifier">File</span><span class="special">();</span>
373
374    <span class="comment">/// Returns `true` if the file is open</span>
375    <span class="keyword">bool</span>
376    <span class="identifier">is_open</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span>
377
378    <span class="comment">/// Close the file if open</span>
379    <span class="keyword">void</span>
380    <span class="identifier">close</span><span class="special">(</span><span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">);</span>
381
382    <span class="comment">/// Open a file at the given path with the specified mode</span>
383    <span class="keyword">void</span>
384    <span class="identifier">open</span><span class="special">(</span><span class="keyword">char</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">path</span><span class="special">,</span> <span class="identifier">file_mode</span> <span class="identifier">mode</span><span class="special">,</span> <span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">);</span>
385
386    <span class="comment">/// Return the size of the open file</span>
387    <span class="identifier">std</span><span class="special">::</span><span class="identifier">uint64_t</span>
388    <span class="identifier">size</span><span class="special">(</span><span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
389
390    <span class="comment">/// Return the current position in the open file</span>
391    <span class="identifier">std</span><span class="special">::</span><span class="identifier">uint64_t</span>
392    <span class="identifier">pos</span><span class="special">(</span><span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
393
394    <span class="comment">/// Adjust the current position in the open file</span>
395    <span class="keyword">void</span>
396    <span class="identifier">seek</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">uint64_t</span> <span class="identifier">offset</span><span class="special">,</span> <span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">);</span>
397
398    <span class="comment">/// Read from the open file</span>
399    <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
400    <span class="identifier">read</span><span class="special">(</span><span class="keyword">void</span><span class="special">*</span> <span class="identifier">buffer</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
401
402    <span class="comment">/// Write to the open file</span>
403    <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span>
404    <span class="identifier">write</span><span class="special">(</span><span class="keyword">void</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">buffer</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">n</span><span class="special">,</span> <span class="identifier">error_code</span><span class="special">&amp;</span> <span class="identifier">ec</span><span class="special">);</span>
405<span class="special">};</span>
406</pre>
407<h5>
408<a name="beast.concepts.File.h3"></a>
409        <span class="phrase"><a name="beast.concepts.File.models"></a></span><a class="link" href="File.html#beast.concepts.File.models">Models</a>
410      </h5>
411<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
412<li class="listitem">
413            <a class="link" href="../ref/boost__beast__file_posix.html" title="file_posix"><code class="computeroutput"><span class="identifier">file_posix</span></code></a>
414          </li>
415<li class="listitem">
416            <a class="link" href="../ref/boost__beast__file_stdio.html" title="file_stdio"><code class="computeroutput"><span class="identifier">file_stdio</span></code></a>
417          </li>
418<li class="listitem">
419            <a class="link" href="../ref/boost__beast__file_win32.html" title="file_win32"><code class="computeroutput"><span class="identifier">file_win32</span></code></a>
420          </li>
421</ul></div>
422</div>
423<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
424<td align="left"></td>
425<td align="right"><div class="copyright-footer">Copyright © 2016-2019 Vinnie
426      Falco<p>
427        Distributed under the Boost Software License, Version 1.0. (See accompanying
428        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
429      </p>
430</div></td>
431</tr></table>
432<hr>
433<div class="spirit-nav">
434<a accesskey="p" href="FieldsWriter.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../concepts.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="RatePolicy.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
435</div>
436</body>
437</html>
438