]> git.saurik.com Git - apple/libc.git/blame - stdio/FreeBSD/fopen.3
Libc-1244.50.9.tar.gz
[apple/libc.git] / stdio / FreeBSD / fopen.3
CommitLineData
5b2abdfb
A
1.\" Copyright (c) 1990, 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" Chris Torek and the American National Standards Committee X3,
6.\" on Information Processing Systems.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\" notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\" notice, this list of conditions and the following disclaimer in the
15.\" documentation and/or other materials provided with the distribution.
b061a43b 16.\" 3. Neither the name of the University nor the names of its contributors
5b2abdfb
A
17.\" may be used to endorse or promote products derived from this software
18.\" without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\" @(#)fopen.3 8.1 (Berkeley) 6/4/93
b061a43b 33.\" $FreeBSD$
5b2abdfb 34.\"
b061a43b 35.Dd January 30, 2013
5b2abdfb
A
36.Dt FOPEN 3
37.Os
38.Sh NAME
ad3c9f2a 39.Nm fopen ,
b061a43b
A
40.Nm fdopen ,
41.Nm freopen ,
42.Nm fmemopen
5b2abdfb
A
43.Nd stream open functions
44.Sh LIBRARY
45.Lb libc
46.Sh SYNOPSIS
47.In stdio.h
48.Ft FILE *
b061a43b 49.Fn fopen "const char * restrict path" "const char * restrict mode"
5b2abdfb 50.Ft FILE *
b061a43b 51.Fn fdopen "int fildes" "const char *mode"
5b2abdfb 52.Ft FILE *
b061a43b
A
53.Fn freopen "const char *path" "const char *mode" "FILE *stream"
54.Ft FILE *
55.Fn fmemopen "void *restrict *buf" "size_t size" "const char * restrict mode"
5b2abdfb
A
56.Sh DESCRIPTION
57The
58.Fn fopen
59function
60opens the file whose name is the string pointed to by
b061a43b 61.Fa path
5b2abdfb
A
62and associates a stream with it.
63.Pp
64The argument
65.Fa mode
b061a43b 66points to a string beginning with one of the following letters:
5b2abdfb
A
67.Bl -tag -width indent
68.It Dq Li r
b061a43b 69Open for reading.
5b2abdfb 70The stream is positioned at the beginning of the file.
b061a43b 71Fail if the file does not exist.
5b2abdfb 72.It Dq Li w
b061a43b 73Open for writing.
5b2abdfb 74The stream is positioned at the beginning of the file.
b061a43b 75Create the file if it does not exist.
5b2abdfb
A
76.It Dq Li a
77Open for writing.
5b2abdfb
A
78The stream is positioned at the end of the file.
79Subsequent writes to the file will always end up at the then current
80end of file, irrespective of any intervening
81.Xr fseek 3
82or similar.
b061a43b 83Create the file if it does not exist.
5b2abdfb
A
84.El
85.Pp
b061a43b
A
86An optional
87.Dq Li +
88following
89.Dq Li r ,
90.Dq Li w ,
91or
92.Dq Li a
93opens the file for both reading and writing.
94An optional
95.Dq Li x
96following
97.Dq Li w
98or
99.Dq Li w+
100causes the
101.Fn fopen
102call to fail if the file already exists.
103An optional
104.Dq Li e
105following the above
106causes the
107.Fn fopen
108call to set the
109.Dv FD_CLOEXEC
110flag on the underlying file descriptor.
111.Pp
5b2abdfb
A
112The
113.Fa mode
b061a43b
A
114string can also include the letter
115.Dq Li b
116after either the
117.Dq Li +
118or the first letter.
5b2abdfb
A
119This is strictly for compatibility with
120.St -isoC
b061a43b
A
121and has effect only for
122.Fn fmemopen
123; otherwise
124.Dq Li b
125is ignored.
ad3c9f2a 126.Pp
5b2abdfb 127Any created files will have mode
b061a43b 128.Do Dv S_IRUSR
5b2abdfb
A
129\&|
130.Dv S_IWUSR
131\&|
132.Dv S_IRGRP
133\&|
134.Dv S_IWGRP
135\&|
136.Dv S_IROTH
137\&|
b061a43b 138.Dv S_IWOTH Dc
5b2abdfb
A
139.Pq Li 0666 ,
140as modified by the process'
141umask value (see
142.Xr umask 2 ) .
143.Pp
5f125488
A
144Reads and writes may be intermixed on read/write streams in any order; however,
145a file positioning function must be called when switching between output and
146input, unless an input operation encounters end-of-file.
5b2abdfb
A
147.Pp
148The
149.Fn fdopen
150function associates a stream with the existing file descriptor,
151.Fa fildes .
9385eb3d 152The mode
5b2abdfb 153of the stream must be compatible with the mode of the file descriptor.
b061a43b
A
154The
155.Dq Li x
156mode option is ignored.
157If the
158.Dq Li e
159mode option is present, the
160.Dv FD_CLOEXEC
161flag is set, otherwise it remains unchanged.
5b2abdfb
A
162When the stream is closed via
163.Xr fclose 3 ,
164.Fa fildes
165is closed also.
166.Pp
167The
168.Fn freopen
169function
170opens the file whose name is the string pointed to by
b061a43b 171.Fa path
5b2abdfb
A
172and associates the stream pointed to by
173.Fa stream
174with it.
175The original stream (if it exists) is closed.
176The
177.Fa mode
178argument is used just as in the
179.Fn fopen
180function.
9385eb3d
A
181.Pp
182If the
b061a43b 183.Fa path
9385eb3d
A
184argument is
185.Dv NULL ,
186.Fn freopen
187attempts to re-open the file associated with
188.Fa stream
189with a new mode.
190The new mode must be compatible with the mode that the stream was originally
191opened with:
b061a43b
A
192Streams open for reading can only be re-opened for reading,
193streams open for writing can only be re-opened for writing,
194and streams open for reading and writing can be re-opened in any mode.
195The
196.Dq Li x
197mode option is not meaningful in this context.
9385eb3d 198.Pp
5b2abdfb
A
199The primary use of the
200.Fn freopen
201function
202is to change the file associated with a
203standard text stream
9385eb3d 204.Dv ( stderr , stdin ,
5b2abdfb 205or
9385eb3d 206.Dv stdout ) .
b061a43b
A
207.Pp
208The
209.Fn fmemopen
210function
211associates the buffer given by the
212.Fa buf
213and
214.Fa size
215arguments with a stream.
216The
217.Fa buf
218argument is either a null pointer or a pointer to a buffer that
219is at least
220.Fa size
221bytes long.
222If a null pointer is specified as the
223.Fa buf
224argument,
225.Fn fmemopen
226allocates
227.Fa size
228bytes of memory, and this allocation is automatically freed when the stream is
229closed.
230If a non-null pointer is specified, the caller retains ownership of
231the buffer and is responsible for disposing of it after the stream has been
232closed.
233Buffers can be opened in text-mode (default) or binary-mode
234(if
235.Dq Li b
236is present in the second or third position of the
237.Fa mode
238argument). Buffers opened in text-mode make sure that writes are terminated with
239a NULL byte, if the last write hasn't filled up the whole buffer. Buffers
240opened in binary-mode never append a NULL byte.
5b2abdfb
A
241.Sh RETURN VALUES
242Upon successful completion
243.Fn fopen ,
ad3c9f2a 244.Fn fdopen ,
5b2abdfb 245.Fn freopen
b061a43b
A
246and
247.Fn fmemopen
5b2abdfb
A
248return a
249.Tn FILE
250pointer.
251Otherwise,
252.Dv NULL
253is returned and the global variable
254.Va errno
255is set to indicate the error.
256.Sh ERRORS
257.Bl -tag -width Er
258.It Bq Er EINVAL
259The
260.Fa mode
9385eb3d
A
261argument
262to
5b2abdfb
A
263.Fn fopen ,
264.Fn fdopen ,
b061a43b 265.Fn freopen ,
5b2abdfb 266or
b061a43b 267.Fn fmemopen
5b2abdfb
A
268was invalid.
269.El
270.Pp
271The
272.Fn fopen ,
b061a43b 273.Fn fdopen ,
5b2abdfb 274.Fn freopen
b061a43b
A
275and
276.Fn fmemopen
5b2abdfb
A
277functions
278may also fail and set
279.Va errno
280for any of the errors specified for the routine
281.Xr malloc 3 .
282.Pp
283The
284.Fn fopen
285function
286may also fail and set
287.Va errno
288for any of the errors specified for the routine
289.Xr open 2 .
290.Pp
291The
292.Fn fdopen
293function
294may also fail and set
295.Va errno
296for any of the errors specified for the routine
297.Xr fcntl 2 .
298.Pp
299The
300.Fn freopen
301function
302may also fail and set
303.Va errno
304for any of the errors specified for the routines
305.Xr open 2 ,
306.Xr fclose 3
307and
308.Xr fflush 3 .
b061a43b
A
309.Pp
310The
311.Fn fmemopen
312function
313may also fail and set
314.Va errno
315if the
316.Fa size
317argument is 0.
5b2abdfb
A
318.Sh SEE ALSO
319.Xr open 2 ,
320.Xr fclose 3 ,
9385eb3d 321.Xr fileno 3 ,
5b2abdfb
A
322.Xr fseek 3 ,
323.Xr funopen 3
324.Sh STANDARDS
325The
326.Fn fopen
327and
328.Fn freopen
329functions
330conform to
b061a43b
A
331.St -isoC ,
332with the exception of the
333.Dq Li x
334mode option which conforms to
335.St -isoC-2011 .
5b2abdfb
A
336The
337.Fn fdopen
338function
339conforms to
340.St -p1003.1-88 .
b061a43b
A
341The
342.Dq Li e
343mode option does not conform to any standard
344but is also supported by glibc.
345The
346.Fn fmemopen
347function
348conforms to
349.St -p1003.1-2008 .
350The
351.Dq Li b
352mode does not conform to any standard
353but is also supported by glibc.