linux_scandir()
2015-10-27 09:54
465 查看
函数int scandir(const char *dir,struct dirent **namelist,int(*filter)(const void *b),
int ( * compare )( conststruct dirent **, const struct dirent ** ) );
(1) 头文件
#include <dirent.h>
(2) 函数定义
int scandir(const char *dir,struct dirent**namelist,int (*filter)(const void *b),
int ( * compare )( conststruct dirent **, const struct dirent ** ) );
(3) 使用说明
函数scandir扫描dir目录下以及dir子目录下满足filter过滤模式的文件,返回的结果是compare函数经过排序的,并保存在 namelist中。注意namelist是通过malloc动态分配内存的,所以在使用时要注意释放内存。alphasort和versionsort 是使用到的两种排序的函数。
当函数成功执行时返回找到匹配模式文件的个数,如果失败将返回-1。
(4) 使用示例
/*
scandir函数
*/
#include <stdio.h>
#include <dirent.h>
int customFilter(const struct dirent *pDir)
{
if (strncmp("test", pDir->d_name, 4) == 0
&& pDir->d_type & 0x04
&& strcmp(pDir->d_name, ".")
&& strcmp(pDir->d_name, ".."))
{
return 1;
}
return 0;
}
int main()
{
struct dirent **namelist;
int n;
int i;
n= scandir(".", &namelist, customFilter, alphasort);
if (n < 0)
{
perror("scandir");
}
else
{
for (i = 0; i < n; i++)
{
printf("%s\n", namelist[i]->d_name);
free(namelist[i]);
}
free(namelist);
}
}
int ( * compare )( conststruct dirent **, const struct dirent ** ) );
(1) 头文件
#include <dirent.h>
(2) 函数定义
int scandir(const char *dir,struct dirent**namelist,int (*filter)(const void *b),
int ( * compare )( conststruct dirent **, const struct dirent ** ) );
(3) 使用说明
函数scandir扫描dir目录下以及dir子目录下满足filter过滤模式的文件,返回的结果是compare函数经过排序的,并保存在 namelist中。注意namelist是通过malloc动态分配内存的,所以在使用时要注意释放内存。alphasort和versionsort 是使用到的两种排序的函数。
当函数成功执行时返回找到匹配模式文件的个数,如果失败将返回-1。
(4) 使用示例
/*
scandir函数
*/
#include <stdio.h>
#include <dirent.h>
int customFilter(const struct dirent *pDir)
{
if (strncmp("test", pDir->d_name, 4) == 0
&& pDir->d_type & 0x04
&& strcmp(pDir->d_name, ".")
&& strcmp(pDir->d_name, ".."))
{
return 1;
}
return 0;
}
int main()
{
struct dirent **namelist;
int n;
int i;
n= scandir(".", &namelist, customFilter, alphasort);
if (n < 0)
{
perror("scandir");
}
else
{
for (i = 0; i < n; i++)
{
printf("%s\n", namelist[i]->d_name);
free(namelist[i]);
}
free(namelist);
}
}
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区