内在的匹配搜索,不需要子进程,直接使用glob()函数匹配搜索:
#include <glob.h>
int glob(const char *pattern, int flags, int errfunc(const char *epath, int eerrno), glob_t *pglob);
glob_t结构体用来保存匹配搜索的结果:
typedef struct
{
int gl_pathc;//匹配已知模式串的文件名个数
char **gl_pathv;//匹配模式串的文件名数组
int gl_offs;
}glob_t;
glob_t使用完成后必须通过globfree()函数释放内存。
范例:
#include <errno.h>
#include <glob.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int errfn(const char *pathname, int err)
{
fprintf(stderr, "error accessing %s:%s/n", pathname, strerror(err));
return 0;
}
int main(int argc, char **argv)
{
glob_t result;
int i,rc,flags;
if(argc<2)
{
printf("wrong args/n");
return 1;
}
flags=0;
for(i=1;i<argc;i++)
{
rc=glob(argv[i], flags, errfn, &result);
if(rc==GLOB_NOSPACE)
{
fprintf(stderr, "out of space/n");
return 1;
}
flags|=GLOB_APPEND;
}
if(!result.gl_pathc)
{
fprintf(stderr, "no matches/n");
rc=1;
}
else
{
for(i=0;i<result.gl_pathc;i++)
puts(result.gl_pathv[i]);
rc=0;
}
globfree(&result);
return rc;
}
运行例子:
aCC -o glob_test glob_test.cpp
glob_test /cbbs_js1/balance/zhangxr/glob_test/*file*