linux scandir 的使用

来源:互联网 发布:国泰安数据服务中心 编辑:程序博客网 时间:2024/05/16 18:51

linux scandir 的使用  



(1) 头文件
#include <dirent.h>   
(2) 函数定义
int scandir(const char *dir,struct dirent **namelist,int (*filter)(const void *b),
                       int ( * compare )( const struct dirent **, const struct dirent ** ) );
int alphasort(const void *a, const void *b);
int versionsort(const void *a, const void *b);

(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);
    }
}

0 0