]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/man/man2/getdirentries.2
xnu-3789.1.32.tar.gz
[apple/xnu.git] / bsd / man / man2 / getdirentries.2
index e6cc24a50abe05284fd0a20362127b7543b31307..7e04d0df594dd2ff9219fc48e1c8eb3dd5603e3d 100644 (file)
 .Nd "get directory entries in a filesystem independent format"
 .Sh SYNOPSIS
 .Fd #include <dirent.h>
+.Fd #include <sys/types.h>
+.Fd #include <sys/dirent.h>
 .Ft int
 .Fn getdirentries "int fd" "char *buf" "int nbytes" "long *basep"
 .Sh DESCRIPTION
-.Fn Getdirentries
+.Fn getdirentries
 reads directory entries from the directory
 referenced by the file descriptor
 .Fa fd
@@ -65,13 +67,8 @@ with buffers smaller than this size.
 .Pp
 The data in the buffer is a series of
 .Em dirent
-structures each containing the following entries:
-.Bd -literal -offset indent
-unsigned long  d_fileno;
-unsigned short d_reclen;
-unsigned short d_namlen;
-char           d_name[MAXNAMELEN + 1]; /* see below */
-.Ed
+structures (see
+.Xr dir 5 )
 .Pp
 The
 .Fa d_fileno
@@ -81,6 +78,12 @@ Files that are linked by hard links (see
 .Xr link 2 )
 have the same
 .Fa d_fileno .
+Users of 
+.Fn getdirentries
+should skip 
+entries with 
+.Fa d_fileno 
+= 0, as such entries represent files which have been deleted but not yet removed from the directory entry.
 The
 .Fa d_reclen
 entry is the length, in bytes, of the directory record.
@@ -95,6 +98,20 @@ Thus the actual size of
 may vary from 1 to
 .Dv MAXNAMELEN
 \&+ 1.
+.Fa d_type
+is a integer representing the type of the directory entry.  The following types are defined in 
+.Aq sys/dirent.h :
+.Bd -literal -offset indent
+#define DT_UNKNOWN       0
+#define DT_FIFO          1
+#define DT_CHR           2
+#define DT_DIR           4
+#define DT_BLK           6
+#define DT_REG           8
+#define DT_LNK          10
+#define DT_SOCK         12
+#define DT_WHT          14
+.Ed
 .Pp
 Entries may be separated by extra space.
 The
@@ -112,7 +129,7 @@ The pointer may not advance by the number of bytes returned by
 A value of zero is returned when
 the end of the directory has been reached.
 .Pp
-.Fn Getdirentries
+.Fn getdirentries
 writes the position of the block read into the location pointed to by
 .Fa basep .
 Alternatively, the current position pointer may be set and retrieved by
@@ -122,13 +139,39 @@ The current position pointer should only be set to a value returned by
 a value returned in the location pointed to by
 .Fa basep ,
 or zero.
+.Sh NOTES
+.Fn getdirentries
+should rarely be used directly; instead,
+.Xr opendir 3
+and
+.Xr readdir 3
+should be used.
+.Pp
+As of Mac OS X 10.6,
+.Fn getdirentries
+is deprecated, and it is recommended that applications
+use
+.Xr readdir 3
+rather than using
+.Fn getdirentries
+directly.  Due to limitations with the system call, 
+.Fn getdirentries
+will not work
+with 64-bit inodes; in order to use
+.Fn getdirentries ,
+.Dv _DARWIN_NO_64_BIT_INODE
+must be defined.  See
+.Xr stat 2
+for more information on
+.Dv _DARWIN_NO_64_BIT_INODE
+and its other effects.
 .Sh RETURN VALUES
 If successful, the number of bytes actually transferred is returned.
 Otherwise, -1 is returned and the global variable
 .Va errno
 is set to indicate the error.
 .Sh ERRORS
-.Fn Getdirentries
+.Fn getdirentries
 will fail if:
 .Bl -tag -width Er
 .It Bq Er EBADF
@@ -146,8 +189,12 @@ An
 error occurred while reading from or writing to the file system.
 .El
 .Sh SEE ALSO
+.Xr lseek 2 ,
 .Xr open 2 ,
-.Xr lseek 2
+.Xr stat 2 ,
+.Xr opendir 3 ,
+.Xr readdir 3 ,
+.Xr dir 5
 .Sh HISTORY
 The
 .Fn getdirentries