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)
{
 	if(argc<2)
        {
               cout<<"<file name>"<<endl;
               return 0;
         }
         test_glob(argc,argv);
         return 0;
}


原文:http://www.cnblogs.com/pengdonglin137/p/3310032.html

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值