]> git.saurik.com Git - apple/libc.git/blob - gen/directory.3
Libc-997.90.3.tar.gz
[apple/libc.git] / gen / directory.3
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.
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
29 .\" $FreeBSD: src/lib/libc/gen/directory.3,v 1.12 2001/10/01 16:08:50 ru Exp $
30 .\"
31 .Dd June 4, 1993
32 .Dt DIRECTORY 3
33 .Os
34 .Sh NAME
35 .Nm closedir ,
36 .Nm dirfd ,
37 .Nm opendir ,
38 .Nm readdir ,
39 .Nm readdir_r ,
40 .Nm rewinddir ,
41 .Nm seekdir ,
42 .Nm telldir
43 .Nd directory operations
44 .Sh LIBRARY
45 .Lb libc
46 .Sh SYNOPSIS
47 .In dirent.h
48 .Ft int
49 .Fn closedir "DIR *dirp"
50 .Ft int
51 .Fn dirfd "DIR *dirp"
52 .Ft DIR *
53 .Fn opendir "const char *dirname"
54 .Ft struct dirent *
55 .Fn readdir "DIR *dirp"
56 .Ft int
57 .Fn readdir_r "DIR *restrict dirp" "struct dirent *restrict entry" \
58 "struct dirent **restrict result"
59 .Ft void
60 .Fn rewinddir "DIR *dirp"
61 .Ft void
62 .Fn seekdir "DIR *dirp" "long loc"
63 .Ft long
64 .Fn telldir "DIR *dirp"
65 .Sh DESCRIPTION
66 The
67 .Fn opendir
68 function
69 opens the directory named by
70 .Fa dirname ,
71 associates a
72 .Em directory stream
73 with it,
74 and returns a pointer to be used to identify the
75 .Em directory stream
76 in subsequent operations.
77 In the event of an error, NULL
78 is returned and
79 .Va errno
80 will be set to reflect if
81 .Fa dirname
82 cannot be accessed or if it cannot
83 .Xr malloc 3
84 enough memory to hold the whole thing.
85 .Pp
86 The
87 .Fn readdir
88 function
89 returns a pointer to the next directory entry.
90 It returns
91 .Dv NULL
92 upon reaching the end of the directory or on error.
93 In the event of an error,
94 .Va errno
95 will be set to any of the values documented for the
96 .Xr getdirentries 2
97 system call.
98 .Pp
99 The
100 .Fn readdir_r
101 function
102 provides the same functionality as
103 .Fn readdir ,
104 but the caller must provide a directory
105 .Fa entry
106 buffer to store the results in.
107 If the read succeeds,
108 .Fa result
109 is pointed at the
110 .Fa entry ;
111 upon reaching the end of the directory,
112 .Fa result
113 is set to
114 .Dv NULL .
115 The
116 .Fn readdir_r
117 function
118 returns 0 on success or an error number to indicate failure.
119 .Pp
120 The
121 .Fn telldir
122 function
123 returns the current location associated with the named
124 .Em directory stream .
125 Values returned by
126 .Fn telldir
127 are good only for the lifetime of the
128 .Dv DIR
129 pointer (e.g.,
130 .Fa dirp )
131 from which they are derived.
132 If the directory is closed and then
133 reopened, prior values returned by
134 .Fn telldir
135 will no longer be valid.
136 .Pp
137 The
138 .Fn seekdir
139 function
140 sets the position of the next
141 .Fn readdir
142 operation on the
143 .Em directory stream .
144 The new position reverts to the one associated with the
145 .Em directory stream
146 when the
147 .Fn telldir
148 operation was performed.
149 .Pp
150 The
151 .Fn rewinddir
152 function
153 resets the position of the named
154 .Em directory stream
155 to the beginning of the directory.
156 .Pp
157 The
158 .Fn closedir
159 function
160 closes the named
161 .Em directory stream
162 and frees the structure associated with the
163 .Fa dirp
164 pointer,
165 returning 0 on success.
166 On failure, \-1 is returned and the global variable
167 .Va errno
168 is set to indicate the error.
169 .Pp
170 The
171 .Fn dirfd
172 function
173 returns the integer file descriptor associated with the named
174 .Em directory stream
175 on success, see
176 .Xr open 2 .
177 On failure, \-1 is returned and the global variable
178 .Va errno
179 is set to indicate the error.
180 .Pp
181 Sample code which searches a directory for entry ``name'' is:
182 .Bd -literal -offset indent
183 dirp = opendir(".");
184 if (dirp == NULL)
185 return (ERROR);
186 len = strlen(name);
187 while ((dp = readdir(dirp)) != NULL) {
188 if (dp->d_namlen == len && strcmp(dp->d_name, name) == 0) {
189 (void)closedir(dirp);
190 return (FOUND);
191 }
192 }
193 (void)closedir(dirp);
194 return (NOT_FOUND);
195 .Ed
196 .Sh LEGACY SYNOPSIS
197 .Fd #include <sys/types.h>
198 .Fd #include <dirent.h>
199 .Pp
200 .In sys/types.h
201 is necessary for these functions.
202 .Sh SEE ALSO
203 .Xr close 2 ,
204 .Xr lseek 2 ,
205 .Xr open 2 ,
206 .Xr read 2 ,
207 .Xr compat 5 ,
208 .Xr dir 5
209 .Sh HISTORY
210 The
211 .Fn closedir ,
212 .Fn dirfd ,
213 .Fn opendir ,
214 .Fn readdir ,
215 .Fn rewinddir ,
216 .Fn seekdir ,
217 and
218 .Fn telldir
219 functions appeared in
220 .Bx 4.2 .