xref: /dflybsd-src/lib/libc/stdio/fmemopen.3 (revision 25c75583712e943b0cb3cb138b4702a2bcdec3f4)
1*f97864e9SVenkatesh Srinivas.\"	$NetBSD: fmemopen.3,v 1.5 2010/10/07 00:14:14 enami Exp $
2*f97864e9SVenkatesh Srinivas.\"
3*f97864e9SVenkatesh Srinivas.\" Copyright (c) 2010 The NetBSD Foundation, Inc.
4*f97864e9SVenkatesh Srinivas.\" All rights reserved.
5*f97864e9SVenkatesh Srinivas.\"
6*f97864e9SVenkatesh Srinivas.\" This code is derived from software contributed to The NetBSD Foundation
7*f97864e9SVenkatesh Srinivas.\" by Christos Zoulas.
8*f97864e9SVenkatesh Srinivas.\"
9*f97864e9SVenkatesh Srinivas.\" Redistribution and use in source and binary forms, with or without
10*f97864e9SVenkatesh Srinivas.\" modification, are permitted provided that the following conditions
11*f97864e9SVenkatesh Srinivas.\" are met:
12*f97864e9SVenkatesh Srinivas.\" 1. Redistributions of source code must retain the above copyright
13*f97864e9SVenkatesh Srinivas.\"    notice, this list of conditions and the following disclaimer.
14*f97864e9SVenkatesh Srinivas.\" 2. Redistributions in binary form must reproduce the above copyright
15*f97864e9SVenkatesh Srinivas.\"    notice, this list of conditions and the following disclaimer in the
16*f97864e9SVenkatesh Srinivas.\"    documentation and/or other materials provided with the distribution.
17*f97864e9SVenkatesh Srinivas.\" 3. All advertising materials mentioning features or use of this software
18*f97864e9SVenkatesh Srinivas.\"    must display the following acknowledgement:
19*f97864e9SVenkatesh Srinivas.\"        This product includes software developed by the NetBSD
20*f97864e9SVenkatesh Srinivas.\"        Foundation, Inc. and its contributors.
21*f97864e9SVenkatesh Srinivas.\" 4. Neither the name of The NetBSD Foundation nor the names of its
22*f97864e9SVenkatesh Srinivas.\"    contributors may be used to endorse or promote products derived
23*f97864e9SVenkatesh Srinivas.\"    from this software without specific prior written permission.
24*f97864e9SVenkatesh Srinivas.\"
25*f97864e9SVenkatesh Srinivas.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
26*f97864e9SVenkatesh Srinivas.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
27*f97864e9SVenkatesh Srinivas.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28*f97864e9SVenkatesh Srinivas.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
29*f97864e9SVenkatesh Srinivas.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30*f97864e9SVenkatesh Srinivas.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31*f97864e9SVenkatesh Srinivas.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32*f97864e9SVenkatesh Srinivas.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33*f97864e9SVenkatesh Srinivas.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34*f97864e9SVenkatesh Srinivas.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35*f97864e9SVenkatesh Srinivas.\" POSSIBILITY OF SUCH DAMAGE.
36*f97864e9SVenkatesh Srinivas.\"
37*f97864e9SVenkatesh Srinivas.Dd May 13, 2011
38*f97864e9SVenkatesh Srinivas.Dt FMEMOPEN 3
39*f97864e9SVenkatesh Srinivas.Os
40*f97864e9SVenkatesh Srinivas.Sh NAME
41*f97864e9SVenkatesh Srinivas.Nm fmemopen
42*f97864e9SVenkatesh Srinivas.Nd open a stream that points to the given buffer
43*f97864e9SVenkatesh Srinivas.Sh LIBRARY
44*f97864e9SVenkatesh Srinivas.Lb libc
45*f97864e9SVenkatesh Srinivas.Sh SYNOPSIS
46*f97864e9SVenkatesh Srinivas.In stdio.h
47*f97864e9SVenkatesh Srinivas.Ft FILE *
48*f97864e9SVenkatesh Srinivas.Fn fmemopen "void *restrict buffer" "size_t size" "const char *restrict mode"
49*f97864e9SVenkatesh Srinivas.Sh DESCRIPTION
50*f97864e9SVenkatesh SrinivasThe
51*f97864e9SVenkatesh Srinivas.Fn fmemopen
52*f97864e9SVenkatesh Srinivasfunction
53*f97864e9SVenkatesh Srinivasassociates a stream with the given
54*f97864e9SVenkatesh Srinivas.Fa buffer
55*f97864e9SVenkatesh Srinivasand
56*f97864e9SVenkatesh Srinivas.Fa size .
57*f97864e9SVenkatesh SrinivasThe
58*f97864e9SVenkatesh Srinivas.Fa buffer
59*f97864e9SVenkatesh Srinivascan be either
60*f97864e9SVenkatesh Srinivas.Dv NULL ,
61*f97864e9SVenkatesh Srinivasor must be of the given
62*f97864e9SVenkatesh Srinivas.Fa size .
63*f97864e9SVenkatesh SrinivasIf the
64*f97864e9SVenkatesh Srinivas.Fa buffer
65*f97864e9SVenkatesh Srinivasis
66*f97864e9SVenkatesh Srinivas.Dv NULL ,
67*f97864e9SVenkatesh Srinivasa
68*f97864e9SVenkatesh Srinivas.Fa buffer
69*f97864e9SVenkatesh Srinivasof the given
70*f97864e9SVenkatesh Srinivas.Fa size
71*f97864e9SVenkatesh Srinivaswill be dynamically allocated using
72*f97864e9SVenkatesh Srinivas.Xr malloc 3
73*f97864e9SVenkatesh Srinivasand freed when
74*f97864e9SVenkatesh Srinivas.Xr fclose 3
75*f97864e9SVenkatesh Srinivasis called.
76*f97864e9SVenkatesh Srinivas.Pp
77*f97864e9SVenkatesh SrinivasThe
78*f97864e9SVenkatesh Srinivas.Fa mode
79*f97864e9SVenkatesh Srinivasargument has the same meaning as in
80*f97864e9SVenkatesh Srinivas.Xr fopen 3 .
81*f97864e9SVenkatesh Srinivas.Pp
82*f97864e9SVenkatesh SrinivasThe stream treats the buffer as it would treat a file tracking the current
83*f97864e9SVenkatesh Srinivasposition to perform I/O operations.
84*f97864e9SVenkatesh SrinivasFor example, in the beginning the stream points to the beginning of the buffer,
85*f97864e9SVenkatesh Srinivasunless
86*f97864e9SVenkatesh Srinivas.Dv a
87*f97864e9SVenkatesh Srinivaswas specified in the
88*f97864e9SVenkatesh Srinivas.Fa mode
89*f97864e9SVenkatesh Srinivasargument, and then it points to the first
90*f97864e9SVenkatesh Srinivas.Dv NUL
91*f97864e9SVenkatesh Srinivasbyte.
92*f97864e9SVenkatesh SrinivasIf a
93*f97864e9SVenkatesh Srinivas.Dv NULL
94*f97864e9SVenkatesh Srinivas.Fa buffer
95*f97864e9SVenkatesh Srinivaswas specified, then the stream will always point at the first byte of the
96*f97864e9SVenkatesh Srinivas.Fa buffer .
97*f97864e9SVenkatesh Srinivas.Pp
98*f97864e9SVenkatesh SrinivasThe stream also keeps track of the
99*f97864e9SVenkatesh Srinivas.Fa size
100*f97864e9SVenkatesh Srinivasof the
101*f97864e9SVenkatesh Srinivas.Fa buffer .
102*f97864e9SVenkatesh SrinivasThe
103*f97864e9SVenkatesh Srinivas.Fa size
104*f97864e9SVenkatesh Srinivasis initialized depending on the mode:
105*f97864e9SVenkatesh Srinivas.Bl -tag -width r/w+
106*f97864e9SVenkatesh Srinivas.It Dv r/r+
107*f97864e9SVenkatesh SrinivasSet to the
108*f97864e9SVenkatesh Srinivas.Fa size
109*f97864e9SVenkatesh Srinivasargument.
110*f97864e9SVenkatesh Srinivas.It Dv w/w+
111*f97864e9SVenkatesh SrinivasSet to
112*f97864e9SVenkatesh Srinivas.Dv 0 .
113*f97864e9SVenkatesh Srinivas.It Dv a/a+
114*f97864e9SVenkatesh SrinivasSet to the first
115*f97864e9SVenkatesh Srinivas.Dv NUL
116*f97864e9SVenkatesh Srinivasbyte, or the
117*f97864e9SVenkatesh Srinivas.Fa size
118*f97864e9SVenkatesh Srinivasargument if one is not found.
119*f97864e9SVenkatesh Srinivas.El
120*f97864e9SVenkatesh Srinivas.Pp
121*f97864e9SVenkatesh SrinivasRead or write operations advance the buffer, but not to exceed the given
122*f97864e9SVenkatesh Srinivas.Fa size
123*f97864e9SVenkatesh Srinivasof the
124*f97864e9SVenkatesh Srinivas.Fa buffer .
125*f97864e9SVenkatesh SrinivasTrying to read beyond the
126*f97864e9SVenkatesh Srinivas.Fa size
127*f97864e9SVenkatesh Srinivasof the
128*f97864e9SVenkatesh Srinivas.Fa buffer
129*f97864e9SVenkatesh Srinivasresults in
130*f97864e9SVenkatesh Srinivas.Dv EOF
131*f97864e9SVenkatesh Srinivasreturned.
132*f97864e9SVenkatesh Srinivas.Dv NUL
133*f97864e9SVenkatesh Srinivasbytes are read normally.
134*f97864e9SVenkatesh SrinivasTrying to write beyond the
135*f97864e9SVenkatesh Srinivas.Fa size
136*f97864e9SVenkatesh Srinivasof the
137*f97864e9SVenkatesh Srinivas.Fa buffer
138*f97864e9SVenkatesh Srinivashas no effect.
139*f97864e9SVenkatesh Srinivas.Pp
140*f97864e9SVenkatesh SrinivasWhen a stream open for writing is either flushed or closed, a
141*f97864e9SVenkatesh Srinivas.Dv NUL
142*f97864e9SVenkatesh Srinivasbyte is written at the current position or at the end of the current
143*f97864e9SVenkatesh Srinivas.Fa size
144*f97864e9SVenkatesh Srinivasas kept internally, if there is room.
145*f97864e9SVenkatesh Srinivas.Sh RETURN VALUES
146*f97864e9SVenkatesh SrinivasUpon successful completion,
147*f97864e9SVenkatesh Srinivas.Fn fmemopen
148*f97864e9SVenkatesh Srinivasreturns a
149*f97864e9SVenkatesh Srinivas.Dv FILE
150*f97864e9SVenkatesh Srinivaspointer.
151*f97864e9SVenkatesh SrinivasOtherwise,
152*f97864e9SVenkatesh Srinivas.Dv NULL
153*f97864e9SVenkatesh Srinivasis returned and the global variable
154*f97864e9SVenkatesh Srinivas.Va errno
155*f97864e9SVenkatesh Srinivasis set to indicate the error.
156*f97864e9SVenkatesh Srinivas.Sh ERRORS
157*f97864e9SVenkatesh Srinivas.Bl -tag -width Er
158*f97864e9SVenkatesh Srinivas.It Bq Er EINVAL
159*f97864e9SVenkatesh SrinivasThe
160*f97864e9SVenkatesh Srinivas.Fa size
161*f97864e9SVenkatesh Srinivaswas
162*f97864e9SVenkatesh Srinivas.Dv 0 ;
163*f97864e9SVenkatesh Srinivasor the
164*f97864e9SVenkatesh Srinivas.Fa mode
165*f97864e9SVenkatesh Srinivasargument is invalid;
166*f97864e9SVenkatesh Srinivasor the
167*f97864e9SVenkatesh Srinivas.Fa buffer
168*f97864e9SVenkatesh Srinivasargument is
169*f97864e9SVenkatesh Srinivas.Dv NULL
170*f97864e9SVenkatesh Srinivasand the
171*f97864e9SVenkatesh Srinivas.Fa mode
172*f97864e9SVenkatesh Srinivasargument does not specify a
173*f97864e9SVenkatesh Srinivas.Dv + .
174*f97864e9SVenkatesh Srinivas.El
175*f97864e9SVenkatesh Srinivas.Pp
176*f97864e9SVenkatesh SrinivasThe
177*f97864e9SVenkatesh Srinivas.Fn fmemopen
178*f97864e9SVenkatesh Srinivasfunction
179*f97864e9SVenkatesh Srinivasmay also fail and set
180*f97864e9SVenkatesh Srinivas.Va errno
181*f97864e9SVenkatesh Srinivasfor any of the errors
182*f97864e9SVenkatesh Srinivasspecified for the routine
183*f97864e9SVenkatesh Srinivas.Xr malloc 3 .
184*f97864e9SVenkatesh Srinivas.Sh SEE ALSO
185*f97864e9SVenkatesh Srinivas.Xr fclose 3 ,
186*f97864e9SVenkatesh Srinivas.Xr fflush 3 ,
187*f97864e9SVenkatesh Srinivas.Xr fopen 3 ,
188*f97864e9SVenkatesh Srinivas.Xr malloc 3
189*f97864e9SVenkatesh Srinivas.Sh HISTORY
190*f97864e9SVenkatesh SrinivasThe
191*f97864e9SVenkatesh Srinivas.Fn fmemopen
192*f97864e9SVenkatesh Srinivasfunctions first appeared in
193*f97864e9SVenkatesh Srinivas.Dx 2.11 .
194*f97864e9SVenkatesh Srinivas.Pp
195*f97864e9SVenkatesh SrinivasThis manual page was imported from
196*f97864e9SVenkatesh Srinivas.Nx 6.0 .
197