xref: /dragonfly/lib/libc/stdio/fseek.3 (revision 0ca59c34)
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.
16.\" 3. Neither the name of the University nor the names of its contributors
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.\"     @(#)fseek.3	8.1 (Berkeley) 6/4/93
33.\" $FreeBSD: src/lib/libc/stdio/fseek.3,v 1.27 2007/06/18 02:13:04 ache Exp $
34.\" $DragonFly: src/lib/libc/stdio/fseek.3,v 1.3 2007/07/30 22:11:33 swildner Exp $
35.\"
36.Dd March 19, 2004
37.Dt FSEEK 3
38.Os
39.Sh NAME
40.Nm fgetpos ,
41.Nm fseek ,
42.Nm fseeko ,
43.Nm fsetpos ,
44.Nm ftell ,
45.Nm ftello ,
46.Nm rewind
47.Nd reposition a stream
48.Sh LIBRARY
49.Lb libc
50.Sh SYNOPSIS
51.In stdio.h
52.Ft int
53.Fn fseek "FILE *stream" "long offset" "int whence"
54.Ft long
55.Fn ftell "FILE *stream"
56.Ft void
57.Fn rewind "FILE *stream"
58.Ft int
59.Fn fgetpos "FILE * restrict stream" "fpos_t * restrict pos"
60.Ft int
61.Fn fsetpos "FILE *stream" "const fpos_t *pos"
62.In sys/types.h
63.Ft int
64.Fn fseeko "FILE *stream" "off_t offset" "int whence"
65.Ft off_t
66.Fn ftello "FILE *stream"
67.Sh DESCRIPTION
68The
69.Fn fseek
70function sets the file position indicator for the stream pointed
71to by
72.Fa stream .
73The new position, measured in bytes, is obtained by adding
74.Fa offset
75bytes to the position specified by
76.Fa whence .
77If
78.Fa whence
79is set to
80.Dv SEEK_SET ,
81.Dv SEEK_CUR ,
82or
83.Dv SEEK_END ,
84the offset is relative to the
85start of the file, the current position indicator, or end-of-file,
86respectively.
87A successful call to the
88.Fn fseek
89function clears the end-of-file indicator for the stream and undoes
90any effects of the
91.Xr ungetc 3
92and
93.Xr ungetwc 3
94functions on the same stream.
95.Pp
96The
97.Fn ftell
98function
99obtains the current value of the file position indicator for the
100stream pointed to by
101.Fa stream .
102.Pp
103The
104.Fn rewind
105function sets the file position indicator for the stream pointed
106to by
107.Fa stream
108to the beginning of the file.
109It is equivalent to:
110.Pp
111.Dl (void)fseek(stream, 0L, SEEK_SET)
112.Pp
113except that the error indicator for the stream is also cleared
114(see
115.Xr clearerr 3 ) .
116.Pp
117Since
118.Fn rewind
119does not return a value,
120an application wishing to detect errors should clear
121.Va errno ,
122then call
123.Fn rewind ,
124and if
125.Va errno
126is non-zero, assume an error has occurred.
127.Pp
128The
129.Fn fseeko
130function is identical to
131.Fn fseek ,
132except it takes an
133.Fa off_t
134argument
135instead of a
136.Fa long .
137Likewise, the
138.Fn ftello
139function is identical to
140.Fn ftell ,
141except it returns an
142.Fa off_t .
143.Pp
144The
145.Fn fgetpos
146and
147.Fn fsetpos
148functions
149are alternate interfaces for retrieving and setting the current position in
150the file, similar to
151.Fn ftell
152and
153.Fn fseek ,
154except that the current position is stored in an opaque object of
155type
156.Vt fpos_t
157pointed to by
158.Fa pos .
159These functions provide a portable way to seek to offsets larger than
160those that can be represented by a
161.Vt long int .
162They may also store additional state information in the
163.Vt fpos_t
164object to facilitate seeking within files containing multibyte
165characters with state-dependent encodings.
166Although
167.Vt fpos_t
168has traditionally been an integral type,
169applications cannot assume that it is;
170in particular, they must not perform arithmetic on objects
171of this type.
172.Pp
173If the stream is a wide character stream (see
174.Xr fwide 3 ) ,
175the position specified by the combination of
176.Fa offset
177and
178.Fa whence
179must contain the first byte of a multibyte sequence.
180.Sh RETURN VALUES
181The
182.Fn rewind
183function
184returns no value.
185.Pp
186.Rv -std fgetpos fseek fseeko fsetpos
187.Pp
188Upon successful completion,
189.Fn ftell
190and
191.Fn ftello
192return the current offset.
193Otherwise, \-1 is returned and the global variable
194.Va errno
195is set to indicate the error.
196.Sh ERRORS
197.Bl -tag -width Er
198.It Bq Er EBADF
199The
200.Fa stream
201argument
202is not a seekable stream.
203.It Bq Er EINVAL
204The
205.Fa whence
206argument is invalid or
207the resulting file-position
208indicator would be set to a negative value.
209.It Bq Er EOVERFLOW
210The resulting file offset would be a value which
211cannot be represented correctly in an object of type
212.Fa off_t
213for
214.Fn fseeko
215and
216.Fn ftello
217or
218.Fa long
219for
220.Fn fseek
221and
222.Fn ftell .
223.It Bq Er ESPIPE
224The file descriptor underlying stream is associated with a pipe or FIFO
225or file-position indicator value is unspecified
226(see
227.Xr ungetc 3 ) .
228.El
229.Pp
230The functions
231.Fn fgetpos ,
232.Fn fseek ,
233.Fn fseeko ,
234.Fn fsetpos ,
235.Fn ftell ,
236.Fn ftello ,
237and
238.Fn rewind
239may also fail and set
240.Va errno
241for any of the errors specified for the routines
242.Xr fflush 3 ,
243.Xr fstat 2 ,
244.Xr lseek 2 ,
245and
246.Xr malloc 3 .
247.Sh SEE ALSO
248.Xr lseek 2 ,
249.Xr clearerr 3 ,
250.Xr fwide 3 ,
251.Xr ungetc 3 ,
252.Xr ungetwc 3
253.Sh STANDARDS
254The
255.Fn fgetpos ,
256.Fn fsetpos ,
257.Fn fseek ,
258.Fn ftell ,
259and
260.Fn rewind
261functions
262conform to
263.St -isoC .
264.Pp
265The
266.Fn fseeko
267and
268.Fn ftello
269functions conform to
270.St -p1003.1-2001 .
271