Linux中glob()、globfree()、getcwd()函数

Linux中glob()与globfree()函数


一、glob()函数

glob()函数作用:

glob()函数用于文件系统中路径名称的模式匹配
函数原型

 #include <glob.h>
int glob(const char *pattern, int flags,
         int errfunc(const char *epath, int eerrno),
                             glob_t *pglob);
 
pglob的类型glob_t  //pathc与pathv类似于argc与argv
typedef struct {
    size_t    gl_pathc;    //匹配到的数量
    char    **gl_pathv;    //匹配到的元素放在这里
    size_t    gl_offs; 
}glob_t;
 

参数详情

pattern:要分析的路径,如/*表示匹配根文件下的所有文件(不包括隐藏文件,要找的隐藏文件需要从新匹配,然后会将匹配出的结果存放到 pglob,即第4个参数中)
flags:选择匹配模式,如是否排序,或者在函数第二次调用时,是否将匹配的内容追加到pglob中,不进行特殊模式匹配则写0
errfunc:glob函数执行出错会执行的函数,出错的路径会回填到epath中,出错的原因回填到eerrno中。如不关注错误可设置为NULL
pglob : 解析出来的结果放在这个参数里
返回值:成功 0 失败 非0

二、globfree()函数

函数功能

释放由glob()函数调用的空间

函数原型

 void globfree(glob_t *pglob);
       typedef struct {
           size_t   gl_pathc;    /* Count of paths matched so far  */
           char   **gl_pathv;    /* List of matched pathnames.  */
           size_t   gl_offs;     /* Slots to reserve in gl_pathv.  */
       } glob_t;

三、getcwd()函数:

函数功能:

获取当前工作目录

函数原型

#include <unistd.h>
char *getcwd(char *buf, size_t size);

参数详情

buf:将当前工作目录的绝对路径复制到参数buf所指的内存空间中
size:参数size为buf的空间大小。
成功调用返回指向buf的指针,失败返回NULL。

四、代码演示

代码功能 利用glob与globfree实现打印当前目录下文件的功能,类似ls
代码如下(示例):

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stddef.h>
#include <glob.h>
int main()
{
  char pat[1024];
  char buff[1024];
  glob_t globers;//定义glob_t结构体用于存放匹配的数据
  int err,i;
  char *cwd=getcwd(buff,1024);//将当前函数目录保存到cwd数组中
  if(cwd==NULL)//函数调用失败
  {
    fprintf(stderr,"函数调用失败");
    exit(1);
  }
  printf("%s",cwd);//调用成功打印出当前目录
  sprintf(pat,"%s%s",cwd,"/*");//将当前目录与/*合并以便于打印出目录下文件
  //*此时pat=/home/zhangyi/fb/*
  err=glob(pat,0,NULL,&globers);//null表示不关注错误,调用成功返回0
  if(err)//调用失败
  {
    printf("匹配失败\n");
    exit(1);
  }
  for(i=0;i<globers.gl_pathc;i++)
  {
    puts(globers.gl_pathv[i]);//打印出当前目录下文件名
  }
  globfree(&globers);
  //  puts(pat);
  exit(0);
}

运行结果如下
在这里插入图片描述
成功打印出当前目录下的文件


总结

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式学习~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值