]> git.lizzy.rs Git - plan9front.git/blob - sys/man/2/bio
Import sources from 2011-03-30 iso image - lib
[plan9front.git] / sys / man / 2 / bio
1 .TH BIO 2
2 .SH NAME
3 Bopen, Binit, Binits, Brdline, Brdstr, Bgetc, Bgetrune, Bgetd, Bungetc, Bungetrune, Bread, Bseek, Boffset, Bfildes, Blinelen, Bputc, Bputrune, Bprint, Bvprint, Bwrite, Bflush, Bterm, Bbuffered \- buffered input/output
4 .SH SYNOPSIS
5 .ta \w'Biobuf* 'u
6 .B #include <u.h>
7 .br
8 .B #include <libc.h>
9 .br
10 .B #include <bio.h>
11 .PP
12 .B
13 Biobuf* Bopen(char *file, int mode)
14 .PP
15 .B
16 int     Binit(Biobuf *bp, int fd, int mode)
17 .PP
18 .B
19 int     Binits(Biobufhdr *bp, int fd, int mode, uchar *buf, int size)
20 .PP
21 .B
22 int     Bterm(Biobufhdr *bp)
23 .PP
24 .B
25 int     Bprint(Biobufhdr *bp, char *format, ...)
26 .PP
27 .B
28 int     Bvprint(Biobufhdr *bp, char *format, va_list arglist);
29 .PP
30 .B
31 void*   Brdline(Biobufhdr *bp, int delim)
32 .PP
33 .B
34 char*   Brdstr(Biobufhdr *bp, int delim, int nulldelim)
35 .PP
36 .B
37 int     Blinelen(Biobufhdr *bp)
38 .PP
39 .B
40 vlong   Boffset(Biobufhdr *bp)
41 .PP
42 .B
43 int     Bfildes(Biobufhdr *bp)
44 .PP
45 .B
46 int     Bgetc(Biobufhdr *bp)
47 .PP
48 .B
49 long    Bgetrune(Biobufhdr *bp)
50 .PP
51 .B
52 int     Bgetd(Biobufhdr *bp, double *d)
53 .PP
54 .B
55 int     Bungetc(Biobufhdr *bp)
56 .PP
57 .B
58 int     Bungetrune(Biobufhdr *bp)
59 .PP
60 .B
61 vlong   Bseek(Biobufhdr *bp, vlong n, int type)
62 .PP
63 .B
64 int     Bputc(Biobufhdr *bp, int c)
65 .PP
66 .B
67 int     Bputrune(Biobufhdr *bp, long c)
68 .PP
69 .B
70 long    Bread(Biobufhdr *bp, void *addr, long nbytes)
71 .PP
72 .B
73 long    Bwrite(Biobufhdr *bp, void *addr, long nbytes)
74 .PP
75 .B
76 int     Bflush(Biobufhdr *bp)
77 .PP
78 .B
79 int     Bbuffered(Biobufhdr *bp)
80 .PP
81 .SH DESCRIPTION
82 These routines implement fast buffered I/O.
83 I/O on different file descriptors is independent.
84 .PP
85 .I Bopen
86 opens
87 .I file
88 for mode
89 .B OREAD
90 or creates for mode
91 .BR OWRITE .
92 It calls
93 .IR malloc (2)
94 to allocate a buffer.
95 .PP
96 .I Binit
97 initializes a standard size buffer, type
98 .IR Biobuf ,
99 with the open file descriptor passed in
100 by the user.
101 .I Binits
102 initializes a non-standard size buffer, type
103 .IR Biobufhdr ,
104 with the open file descriptor,
105 buffer area, and buffer size passed in
106 by the user.
107 .I Biobuf
108 and
109 .I Biobufhdr
110 are related by the declaration:
111 .IP
112 .EX
113 typedef struct Biobuf Biobuf;
114 struct Biobuf
115 {
116         Biobufhdr;
117         uchar b[Bungetsize+Bsize];
118 };
119 .EE
120 .PP
121 Arguments
122 of types pointer to Biobuf and pointer to Biobufhdr
123 can be used interchangeably in the following routines.
124 .PP
125 .IR Bopen ,
126 .IR Binit ,
127 or
128 .I Binits
129 should be called before any of the
130 other routines on that buffer.
131 .I Bfildes
132 returns the integer file descriptor of the associated open file.
133 .PP
134 .I Bterm
135 flushes the buffer for
136 .IR bp
137 and returns
138 .IR Bflush 's
139 return value.
140 If the buffer was allocated by
141 .IR Bopen ,
142 the buffer is
143 .I freed
144 and the file is closed.
145 .PP
146 .I Brdline
147 reads a string from the file associated with
148 .I bp
149 up to and including the first
150 .I delim
151 character.
152 The delimiter character at the end of the line is
153 not altered, thus the returned string probably won't be NUL-terminated.
154 .I Brdline
155 returns a pointer to the start of the line or
156 .L 0
157 on end-of-file or read error.
158 .I Blinelen
159 returns the length (including the delimiter)
160 of the most recent string returned by
161 .IR Brdline .
162 .PP
163 .I Brdstr
164 returns a
165 .IR malloc (2)-allocated
166 buffer containing the next line of input delimited by
167 .IR delim ,
168 terminated by a NUL (0) byte.
169 Unlike
170 .IR Brdline ,
171 which returns when its buffer is full even if no delimiter has been found,
172 .I Brdstr
173 will return an arbitrarily long line in a single call.
174 If
175 .I nulldelim
176 is set, the terminal delimiter will be overwritten with a NUL.
177 After a successful call to
178 .IR Brdstr ,
179 the return value of
180 .I Blinelen
181 will be the length of the returned buffer, excluding the NUL.
182 .PP
183 .I Bgetc
184 returns the next character from
185 .IR bp ,
186 or a negative value
187 at end of file.
188 .I Bungetc
189 may be called immediately after
190 .I Bgetc
191 to allow the same character to be reread.
192 .PP
193 .I Bgetrune
194 calls
195 .I Bgetc
196 to read the bytes of the next
197 .SM UTF
198 sequence in the input stream and returns the value of the rune
199 represented by the sequence.
200 It returns a negative value
201 at end of file.
202 .I Bungetrune
203 may be called immediately after
204 .I Bgetrune
205 to allow the same
206 .SM UTF
207 sequence to be reread as either bytes or a rune.
208 .I Bungetc
209 and
210 .I Bungetrune
211 may back up a maximum of five bytes.
212 .PP
213 .I Bgetd
214 uses
215 .I charstod
216 (see
217 .IR atof (2))
218 and
219 .I Bgetc
220 to read the formatted
221 floating-point number in the input stream,
222 skipping initial blanks and tabs.
223 The value is stored in
224 .BR *d.
225 .PP
226 .I Bread
227 reads
228 .I nbytes
229 of data from
230 .I bp
231 into memory starting at
232 .IR addr .
233 The number of bytes read is returned on success
234 and a negative value is returned if a read error occurred.
235 .PP
236 .I Bseek
237 applies
238 .IR seek (2)
239 to
240 .IR bp .
241 It returns the new file offset.
242 .I Boffset
243 returns the file offset of the next character to be processed.
244 .PP
245 .I Bputc
246 outputs the low order 8 bits of
247 .I c
248 on
249 .IR bp .
250 If this causes a
251 .IR write
252 to occur and there is an error,
253 a negative value is returned.
254 Otherwise, a zero is returned.
255 .PP
256 .I Bputrune
257 calls
258 .I Bputc
259 to output the low order
260 16 bits of
261 .I c
262 as a rune
263 in
264 .SM UTF
265 format
266 on the output stream.
267 .PP
268 .I Bprint
269 is a buffered interface to
270 .IR print (2).
271 If this causes a
272 .IR write
273 to occur and there is an error,
274 a negative value
275 .RB ( Beof )
276 is returned.
277 Otherwise, 
278 .I Bprint
279 returns the number of bytes written.
280 .I Bvprint
281 does the same except it takes as argument a
282 .B va_list
283 parameter, so it can be called within a variadic function.
284 .PP
285 .I Bwrite
286 outputs
287 .I nbytes
288 of data starting at
289 .I addr
290 to
291 .IR bp .
292 If this causes a
293 .IR write
294 to occur and there is an error,
295 a negative value is returned.
296 Otherwise, the number of bytes written is returned.
297 .PP
298 .I Bflush
299 causes any buffered output associated with
300 .I bp
301 to be written.
302 The return is as for
303 .IR Bputc .
304 .I Bflush
305 is called on
306 exit for every buffer still open
307 for writing.
308 .PP
309 .I Bbuffered
310 returns the number of bytes in the buffer.
311 When reading, this is the number of bytes still available from the last
312 read on the file; when writing, it is the number of bytes ready to be
313 written.
314 .SH SOURCE
315 .B /sys/src/libbio
316 .SH SEE ALSO
317 .IR open (2),
318 .IR print (2),
319 .IR exits (2),
320 .IR utf (6),
321 .SH DIAGNOSTICS
322 .I Bio
323 routines that return integers yield
324 .B Beof
325 if 
326 .I bp
327 is not the descriptor of an open file.
328 .I Bopen
329 returns zero if the file cannot be opened in the given mode.
330 All routines set
331 .I errstr
332 on error.
333 .SH BUGS
334 .I Brdline
335 returns an error on strings longer than the buffer associated
336 with the file
337 and also if the end-of-file is encountered
338 before a delimiter.
339 .I Blinelen
340 will tell how many characters are available
341 in these cases.
342 In the case of a true end-of-file,
343 .I Blinelen
344 will return zero.
345 At the cost of allocating a buffer,
346 .I Brdstr
347 sidesteps these issues.
348 .PP
349 Only the low byte of
350 .IR Brdstr 's
351 .I delim
352 is examined, so
353 .I delim
354 cannot be an arbitrary rune.
355 .PP
356 The data returned by
357 .I Brdline
358 may be overwritten by calls to any other
359 .I bio
360 routine on the same
361 .IR bp.