#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#if 0
struct dirent64 *readdir64(DIR* DIRP);
readdir64() 函数类似于 readdir() 函数,是大型文件扩展名。
返回值
如果成功,readdir() 和 readdir64() 返回指向对象的指针结构型 dirent 或结构型 dirent64。
#ifdef __USE_LARGEFILE64
struct dirent64
{
__ino64_t d_ino;
__off64_t d_off;
unsigned short int d_reclen;
unsigned char d_type;
char d_name[256]; /* We must not include limits.h! */
};
#endif
#endif
static int test()
{
DIR * p_dir = NULL;
struct dirent64 * dp = NULL;
int len = -1;
char *name = "aaaaa";
char *ptr;
// 通过opendir打开目录
p_dir = opendir("/proc");
if (p_dir == NULL) {
return (-1);
}
len = strlen(name);
// 开始遍历p_dir文件夹
while ((dp = readdir64(p_dir)) != NULL) {
//printf("inode number:%ld offset:%ld len:%d\n", dp->d_ino, dp->d_off, dp->d_reclen);
printf("name:%s:%d\n", dp->d_name, dp->d_type);
// 比较dp->d_name与name的值, 如果匹配则返回
if (dp->d_reclen == len && strcmp(dp->d_name, name) == 0) {
(void)closedir(p_dir);
return 0;
}
if (strtol(dp->d_name, &ptr, 0xa) != 0)
break;
}
printf("sizeof(struct dirent)=%d, -name=%d\n", sizeof(struct dirent64), sizeof(struct dirent64) - 256);
printf("sizeof(ino_t)=%d, sizeof(off_t)=%d\n", sizeof(ino_t), sizeof(off_t));
// 关闭dir
(void)closedir(p_dir);
return 0;
}
int main()
{
test();
return 0;
}
#if 0
// 以上代码如果编译报错需开启以下定义
在所有头文件之前添加
#define _GNU_SOURCE
#define _FILE_OFFSET_BITS 64
或者更改编译选项
gcc -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
#endif