函数原型
opendir
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
DIR *fdopendir(int fd);
readdir
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
struct dirent
结构体定义:
struct dirent {
ino_t d_ino; /* Inode number */
off_t d_off; /* Not an offset; see below */
unsigned short d_reclen; /* Length of this record */
unsigned char d_type; /* Type of file; not supported
by all filesystem types */
char d_name[256]; /* Null-terminated filename */
};
closedir
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
示例
kls.c
#include "khead.h"
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char* argv[]) {
if (argc != 2) {
printf("usage: kls dir");
exit(1);
}
DIR *dp;
struct dirent *dep;
dp = opendir(argv[1]);
if (dp == NULL) {
err_msg("opendir err");
}
while (dep = readdir(dp)) {
printf("%s\n", dep->d_name);
}
closedir(dp);
return 0;
}
khead.c
头文件
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
extern int errno;
void err_msg(const char* str) {
printf("%s\n", str);
printf("errno: %d\terrmsg: %s\n", errno, strerror(errno));
}