]> git.saurik.com Git - apple/libc.git/blame - gen/directory.3
Libc-1158.30.7.tar.gz
[apple/libc.git] / gen / directory.3
CommitLineData
5b2abdfb
A
1.\" Copyright (c) 1983, 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
4.\" Redistribution and use in source and binary forms, with or without
5.\" modification, are permitted provided that the following conditions
6.\" are met:
7.\" 1. Redistributions of source code must retain the above copyright
8.\" notice, this list of conditions and the following disclaimer.
9.\" 2. Redistributions in binary form must reproduce the above copyright
10.\" notice, this list of conditions and the following disclaimer in the
11.\" documentation and/or other materials provided with the distribution.
5b2abdfb
A
12.\" 4. Neither the name of the University nor the names of its contributors
13.\" may be used to endorse or promote products derived from this software
14.\" without specific prior written permission.
15.\"
16.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26.\" SUCH DAMAGE.
27.\"
28.\" @(#)directory.3 8.1 (Berkeley) 6/4/93
23e20b00 29.\" $FreeBSD$
5b2abdfb 30.\"
23e20b00 31.Dd April 16, 2008
5b2abdfb
A
32.Dt DIRECTORY 3
33.Os
34.Sh NAME
35.Nm opendir ,
23e20b00 36.Nm fdopendir ,
5b2abdfb
A
37.Nm readdir ,
38.Nm readdir_r ,
23e20b00 39.Nm telldir ,
224c7076 40.Nm seekdir ,
23e20b00
A
41.Nm rewinddir ,
42.Nm closedir ,
43.Nm dirfd
5b2abdfb
A
44.Nd directory operations
45.Sh LIBRARY
46.Lb libc
47.Sh SYNOPSIS
5b2abdfb
A
48.In dirent.h
49.Ft DIR *
23e20b00
A
50.Fn opendir "const char *filename"
51.Ft DIR *
52.Fn fdopendir "int fd"
5b2abdfb
A
53.Ft struct dirent *
54.Fn readdir "DIR *dirp"
55.Ft int
23e20b00 56.Fn readdir_r "DIR *dirp" "struct dirent *entry" "struct dirent **result"
224c7076
A
57.Ft long
58.Fn telldir "DIR *dirp"
23e20b00
A
59.Ft void
60.Fn seekdir "DIR *dirp" "long loc"
61.Ft void
62.Fn rewinddir "DIR *dirp"
63.Ft int
64.Fn closedir "DIR *dirp"
65.Ft int
66.Fn dirfd "DIR *dirp"
5b2abdfb
A
67.Sh DESCRIPTION
68The
69.Fn opendir
70function
71opens the directory named by
23e20b00 72.Fa filename ,
5b2abdfb
A
73associates a
74.Em directory stream
23e20b00
A
75with it
76and
77returns a pointer to be used to identify the
5b2abdfb 78.Em directory stream
6465356a 79in subsequent operations.
23e20b00
A
80The pointer
81.Dv NULL
82is returned if
83.Fa filename
84cannot be accessed, or if it cannot
5b2abdfb 85.Xr malloc 3
23e20b00
A
86enough memory to hold the whole thing,
87and sets the global variable
88.Va errno
89to indicate the error.
90.Pp
91The
92.Fn fdopendir
93function is equivalent to the
94.Fn opendir
95function except that the directory is specified by a file descriptor
96.Fa fd
97rather than by a name.
98./"The file offset associated with the file descriptor at the time of the call
99./"determines which entries are returned.
100.Pp
101Upon successful return from
102.Fn fdopendir ,
103the file descriptor is under the control of the system,
104and if any attempt is made to close the file descriptor,
105or to modify the state of the associated description other than by means
106of
107.Fn closedir ,
108.Fn readdir ,
109.Fn readdir_r ,
110or
111.Fn rewinddir ,
112the behavior is undefined.
113Upon calling
114.Fn closedir
115the file descriptor is closed.
116The
117.Dv FD_CLOEXEC
118flag is set on the file descriptor by a successful call to
119.Fn fdopendir .
5b2abdfb
A
120.Pp
121The
122.Fn readdir
123function
6465356a
A
124returns a pointer to the next directory entry.
125It returns
5b2abdfb 126.Dv NULL
6465356a
A
127upon reaching the end of the directory or on error.
128In the event of an error,
129.Va errno
23e20b00 130may be set to any of the values documented for the
6465356a
A
131.Xr getdirentries 2
132system call.
5b2abdfb 133.Pp
6465356a 134The
5b2abdfb 135.Fn readdir_r
6465356a 136function
5b2abdfb
A
137provides the same functionality as
138.Fn readdir ,
139but the caller must provide a directory
140.Fa entry
6465356a
A
141buffer to store the results in.
142If the read succeeds,
5b2abdfb
A
143.Fa result
144is pointed at the
145.Fa entry ;
23e20b00 146upon reaching the end of the directory
5b2abdfb
A
147.Fa result
148is set to
149.Dv NULL .
6465356a 150The
5b2abdfb 151.Fn readdir_r
6465356a 152function
5b2abdfb
A
153returns 0 on success or an error number to indicate failure.
154.Pp
155The
156.Fn telldir
157function
158returns the current location associated with the named
159.Em directory stream .
160Values returned by
161.Fn telldir
162are good only for the lifetime of the
163.Dv DIR
23e20b00
A
164pointer,
165.Fa dirp ,
6465356a
A
166from which they are derived.
167If the directory is closed and then
5b2abdfb
A
168reopened, prior values returned by
169.Fn telldir
170will no longer be valid.
171.Pp
172The
173.Fn seekdir
174function
175sets the position of the next
176.Fn readdir
177operation on the
178.Em directory stream .
179The new position reverts to the one associated with the
180.Em directory stream
181when the
182.Fn telldir
183operation was performed.
184.Pp
185The
186.Fn rewinddir
187function
188resets the position of the named
189.Em directory stream
190to the beginning of the directory.
191.Pp
192The
193.Fn closedir
194function
195closes the named
196.Em directory stream
197and frees the structure associated with the
198.Fa dirp
199pointer,
200returning 0 on success.
201On failure, \-1 is returned and the global variable
202.Va errno
203is set to indicate the error.
204.Pp
205The
206.Fn dirfd
207function
208returns the integer file descriptor associated with the named
23e20b00
A
209.Em directory stream ,
210see
5b2abdfb 211.Xr open 2 .
ad3c9f2a
A
212On failure, \-1 is returned and the global variable
213.Va errno
214is set to indicate the error.
5b2abdfb
A
215.Pp
216Sample code which searches a directory for entry ``name'' is:
217.Bd -literal -offset indent
5b2abdfb 218dirp = opendir(".");
6465356a
A
219if (dirp == NULL)
220 return (ERROR);
221len = strlen(name);
222while ((dp = readdir(dirp)) != NULL) {
223 if (dp->d_namlen == len && strcmp(dp->d_name, name) == 0) {
5b2abdfb 224 (void)closedir(dirp);
6465356a 225 return (FOUND);
5b2abdfb 226 }
6465356a 227}
5b2abdfb 228(void)closedir(dirp);
6465356a 229return (NOT_FOUND);
5b2abdfb
A
230.Ed
231.Sh SEE ALSO
232.Xr close 2 ,
233.Xr lseek 2 ,
234.Xr open 2 ,
235.Xr read 2 ,
236.Xr dir 5
237.Sh HISTORY
238The
239.Fn opendir ,
240.Fn readdir ,
23e20b00 241.Fn telldir ,
224c7076 242.Fn seekdir ,
23e20b00
A
243.Fn rewinddir ,
244.Fn closedir ,
5b2abdfb 245and
23e20b00 246.Fn dirfd
5b2abdfb
A
247functions appeared in
248.Bx 4.2 .
23e20b00
A
249The
250.Fn fdopendir
251function appeared in
252.Fx 8.0 .