代码如下:
#include <dirent.h>
#include <stdio.h>
// 自定义的过滤器函数
// 本函数只能做为 scandir 函数的参数,被 scandir 函数回调
// 注:1. 本函数不能被定义为 static int custom_filter( const struct dirent *pSDirent ) 静态函数;
// 2. 参数一定要为 const struct dirent *pSDirent 不可省略前面的 const ;
int
custom_filter( const struct dirent *dp )
{
if ( 0 == strncmp( "get",
dp->d_name,
3 ) )
{
// 非零为保留 - 不滤掉
return 1;
}
// 零为过滤掉 - 过滤掉
return 0;
}
void main()
{
struct dirent **namelist;
int i;
int total;
total = scandir( "./",
&namelist,
custom_filter,
alphasort );
if ( total < 0 )
{
printf( "scandir fault\n" );
}
else
{
for( i = 0;
i < total;
i++ )
{
printf( "%s\n",
namelist[i]->d_name );
}
printf( "total = %d\n",
total );
}
}
结果如下:
不加 custom_filter 过滤函数的情况
total = scandir( "./",
&namelist,
0,
alphasort );
linuxidc@linuxidc-Ubuntu:/media/TestSrc$ ./getselfname
.
..
getselfname
getselfname.c
total = 4
加了 custom_filter 过滤函数的情况
total = scandir( "./",
&namelist,
custom_filter,
alphasort );
linuxidc@linuxidc-Ubuntu:/media/TestSrc$ ./getselfname
getselfname
getselfname.c
total = 2