wildcard

来源:互联网 发布:淘宝专业版全屏代码 编辑:程序博客网 时间:2024/06/04 19:46
使用子进程匹配搜索文件名——直接用popen()函数;
内在的匹配搜索,不需要子进程,直接使用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=0;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;
}
原创粉丝点击