理论
#include<sys/types.h>
#include<dirent.h>
typedef struct __dirstream DIR;
struct __dirstream
{
void *__fd;
char *__data;
int __entry_data;
char *__ptr;
int __entry_ptr;
size_t __allocation;
size_t __size;
__libc_lock_define (, __lock)
};
DIR *opendir (const char *__name)
struct dirent
{
ino_t d_ino;
ff_t d_off;
signed short int d_reclen;
unsigned char d_type;
har d_name[256];
}
struct dirent *readdir (DIR *__dirp)
int closedir (DIR *__dirp)
实践
读取
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <errno.h>
int main(int argc, char **argv)
{
DIR *streamp;
struct dirent *dep;
if (argc != 2) {
printf("usage: %s <pathname>\n", argv[0]);
exit(1);
}
streamp = opendir(argv[1]);
errno = 0;
while ((dep = readdir(streamp)) != NULL) {
if(strcmp(dep->d_name, ".") == 0 || strcmp(dep->d_name, "..") == 0){
continue;
}
printf("Found file: %s\n", dep->d_name);
}
if (errno != 0){
printf("readdir error");
exit(0);
}
closedir(streamp);
exit(0);
}
封装
DIR *Opendir(const char *name)
{
DIR *dirp = opendir(name);
if (!dirp){
printf("opendir error");
exit(0);
}
return dirp;
}
struct dirent *Readdir(DIR *dirp)
{
struct dirent *dep;
errno = 0;
dep = readdir(dirp);
if ((dep == NULL) && (errno != 0)){
printf("readdir error");
exit(0);
}
return dep;
}
int Closedir(DIR *dirp)
{
int rc;
if ((rc = closedir(dirp)) < 0){
printf("closedir error");
exit(0);
}
return rc;
}