xref: /netbsd/lib/libc/stdio/fopen.3 (revision bf9ec67e)
1.\"	$NetBSD: fopen.3,v 1.15 2002/05/15 07:00:22 kleink Exp $
2.\"
3.\" Copyright (c) 1990, 1991, 1993
4.\"	The Regents of the University of California.  All rights reserved.
5.\"
6.\" This code is derived from software contributed to Berkeley by
7.\" Chris Torek and the American National Standards Committee X3,
8.\" on Information Processing Systems.
9.\"
10.\" Redistribution and use in source and binary forms, with or without
11.\" modification, are permitted provided that the following conditions
12.\" are met:
13.\" 1. Redistributions of source code must retain the above copyright
14.\"    notice, this list of conditions and the following disclaimer.
15.\" 2. Redistributions in binary form must reproduce the above copyright
16.\"    notice, this list of conditions and the following disclaimer in the
17.\"    documentation and/or other materials provided with the distribution.
18.\" 3. All advertising materials mentioning features or use of this software
19.\"    must display the following acknowledgement:
20.\"	This product includes software developed by the University of
21.\"	California, Berkeley and its contributors.
22.\" 4. Neither the name of the University nor the names of its contributors
23.\"    may be used to endorse or promote products derived from this software
24.\"    without specific prior written permission.
25.\"
26.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36.\" SUCH DAMAGE.
37.\"
38.\"     @(#)fopen.3	8.1 (Berkeley) 6/4/93
39.\"
40.Dd June 4, 1993
41.Dt FOPEN 3
42.Os
43.Sh NAME
44.Nm fopen ,
45.Nm fdopen ,
46.Nm freopen
47.Nd stream open functions
48.Sh LIBRARY
49.Lb libc
50.Sh SYNOPSIS
51.Fd #include \*[Lt]stdio.h\*[Gt]
52.Ft FILE *
53.Fn fopen "const char *path" "const char *mode"
54.Ft FILE *
55.Fn fdopen "int fildes" "const char *mode"
56.Ft FILE *
57.Fn freopen "const char *path" "const char *mode" "FILE * restrict stream"
58.Sh DESCRIPTION
59The
60.Fn fopen
61function
62opens the file whose name is the string pointed to by
63.Fa path
64and associates a stream with it.
65.Pp
66The argument
67.Fa mode
68points to a string beginning with one of the following
69sequences (Additional characters may follow these sequences.):
70.Bl -tag -width indent
71.It Dq Li r
72Open text file for reading.
73.It Dq Li r+
74Open for reading and writing.
75.It Dq Li w
76Truncate file to zero length or create text file for writing.
77.It Dq Li w+
78Open for reading and writing.
79The file is created if it does not exist, otherwise it is truncated.
80.It Dq Li a
81Append; open for writing.
82The file is created if it does not exist.
83.It Dq Li a+
84Append; open for reading and writing.
85The file is created if it does not exist.
86.El
87.Pp
88The
89.Fa mode
90string can also include the letter ``b'' either as a last character or
91as a character between the characters in any of the two-character strings
92described above.
93This is strictly for compatibility with
94.St -ansiC
95and has no effect; the ``b'' is ignored.
96.Pp
97The letter ``f'' in the mode string restricts fopen to regular
98files; if the file opened is not a regular file,
99.Fn fopen
100will fail. This is a non
101.St -ansiC
102extension.
103.Pp
104Any created files will have mode
105.Pf \\*q Dv S_IRUSR
106\&|
107.Dv S_IWUSR
108\&|
109.Dv S_IRGRP
110\&|
111.Dv S_IWGRP
112\&|
113.Dv S_IROTH
114\&|
115.Dv S_IWOTH Ns \\*q
116.Pq Li 0666 ,
117as modified by the process'
118umask value (see
119.Xr umask 2 ) .
120.Pp
121Opening a file with append mode causes all subsequent writes to it
122to be forced to the then current end of file, regardless of intervening
123repositioning of the stream.
124.Pp
125The
126.Fn fopen
127and
128.Fn freopen
129functions initially position the stream at the start of the file
130unless the file is opened with append mode,
131in which case the stream is initially positioned at the end of the file.
132.\" PR 6072 claims this paragraph is not correct.
133.\" .Pp
134.\" Reads and writes may be intermixed on read/write streams in any order,
135.\" and do not require an intermediate seek as in previous versions of
136.\" .Em stdio .
137.\" This is not portable to other systems, however;
138.\" .Tn ANSI C
139.\" requires that
140.\" a file positioning function intervene between output and input, unless
141.\" an input operation encounters end-of-file.
142.Pp
143The
144.Fn fdopen
145function associates a stream with the existing file descriptor,
146.Fa fildes .
147The
148.Fa mode
149of the stream must be compatible with the mode of the file descriptor.
150The stream is positioned at the file offset of the file descriptor.
151.Pp
152The
153.Fn freopen
154function
155opens the file whose name is the string pointed to by
156.Fa path
157and associates the stream pointed to by
158.Fa stream
159with it.
160The original stream (if it exists) is closed.
161The
162.Fa mode
163argument is used just as in the
164.Fn fopen
165function.
166The primary use of the
167.Fn freopen
168function
169is to change the file associated with a
170standard text stream
171.Pf ( Em stderr ,
172.Em stdin ,
173or
174.Em stdout ) .
175.Sh RETURN VALUES
176Upon successful completion
177.Fn fopen ,
178.Fn fdopen
179and
180.Fn freopen
181return a
182.Tn FILE
183pointer.
184Otherwise,
185.Dv NULL
186is returned and the global variable
187.Va errno
188is set to indicate the error.
189.Sh ERRORS
190.Bl -tag -width Er
191.It Bq Er EINVAL
192The
193.Fa mode
194provided to
195.Fn fopen ,
196.Fn fdopen ,
197or
198.Fn freopen
199was invalid.
200.It Bq Er EFTYPE
201The file is not a regular file and the character ``f'' is specified
202in the mode.
203.El
204.Pp
205The
206.Fn fopen ,
207.Fn fdopen
208and
209.Fn freopen
210functions
211may also fail and set
212.Va errno
213for any of the errors specified for the routine
214.Xr malloc 3 .
215.Pp
216The
217.Fn fopen
218function
219may also fail and set
220.Va errno
221for any of the errors specified for the routine
222.Xr open 2 .
223.Pp
224The
225.Fn fdopen
226function
227may also fail and set
228.Va errno
229for any of the errors specified for the routine
230.Xr fcntl 2 .
231.Pp
232The
233.Fn freopen
234function
235may also fail and set
236.Va errno
237for any of the errors specified for the routines
238.Xr open 2 ,
239.Xr fclose 3
240and
241.Xr fflush 3 .
242.Sh SEE ALSO
243.Xr open 2 ,
244.Xr fclose 3 ,
245.Xr fseek 3 ,
246.Xr funopen 3
247.Sh STANDARDS
248The
249.Fn fopen
250and
251.Fn freopen
252functions
253conform to
254.St -ansiC .
255The
256.Fn fdopen
257function conforms to
258.St -p1003.1-90 .
259