glob函数的使用(转)
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)
- {
- <span style="white-space:pre;"> </span>if(argc<2)
- {
- cout<<"<file name>"<<endl;
- return 0;
- }
- test_glob(argc,argv);
- return 0;
- }
原文:http://www.cnblogs.com/pengdonglin137/p/3310032.html
补充:
flags 有效标记有:
GLOB_MARK - 在每个返回的项目中加一个斜线
GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
GLOB_NOESCAPE - 反斜线不转义元字符
GLOB_BRACE - 扩充 {a,b,c} 来匹配 ‘a’,’b’ 或 ‘c’
GLOB_ONLYDIR - 仅返回与模式匹配的目录项
GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误

浙公网安备 33010602011771号