glob库函数用于Linux文件系统中路径名称的模式匹配,即查找文件系统中指定模式的路径。注意,这不是正则表达式匹配,虽然有些相似,但还是有点差别。
glob函数原型
#include <glob.h>
int glob(const char *pattern, int flags,
int errfunc(const char *epath, int eerrno),
glob_t *pglob);
glob函数搜索匹配 函数pattern中的参数,如/*是匹配根文件下的所有文件(不包括隐藏文件,要找的隐藏文件需要从新匹配),然后会将匹配出的结果存放到 pglob,即第4个参数中,第二个参数能选择匹配模式,如是否排序,或者在函数第二次调用时,是否将匹配的内容追加到pglob中,等,第3个参数是查看错误信息用,一般置为NULL;
具体可以在终端下输入 man glob
#include <stdio.h>
#include <glob.h>
int main(int argc, const char *argv[])
{
glob_t buf;
int i;
glob("/dev/*",GLOB_NOSORT, NULL, &buf);
for(i=0; i < buf.gl_pathc; i++)
{
printf("buf.gl_pathv[%d]= %s \n", i, (buf.gl_pathv[i]));
}
globfree(&buf);
return 0;
}
在linux编程中,有时候会用到批量处理文件。比如写一个上传工具,用户输入文件名,如果此时用户使用的是匹配的文件名,那么程序应该做到根据匹配字符串自动搜索符合要求的文件名的功能。
linux有一个glob函数,可以做到这一点,该函数位于头文件glob.h中
#include <iostream>
#include <string>
#include <glob.h>
using namespace std;
void print_gl(glob_t &gl)
{
for(int i=0;i<gl.gl_pathc;i++)
{
cout<<gl.gl_pathv[i]<<endl;
}
}
void test_glob(int argc , char **argv)
{
glob_t gl;
for(int i=1;i<argc;i++)
{
gl.gl_offs=0;
glob(argv[i],GLOB_TILDE,0,&gl);
print_gl(gl);
globfree(&gl);
}
}
int main(int argc,char **argv)
{
if(argc<2)
{
cout<<"<file name>"<<endl;
return 0;
}
test_glob(argc,argv);
return 0;
}
原文:http://www.cnblogs.com/pengdonglin137/p/3310032.html