You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:在C语言中使用通配符查找指定扩展名文件名的示例代码

在C程序中使用通配符匹配并打开.UBX文件

嘿,我懂你的困扰——open()函数本身不支持通配符解析,终端里能直接用*.UBX生效,是因为shell在执行命令前已经帮你把通配符扩展成了实际的文件名。要在C程序里实现这个功能,咱们可以用标准库的glob()函数,它专门用来处理文件名的通配符匹配,刚好适配你“文件夹中仅有一个.UBX文件”的场景。

下面是完整的示例代码,附带详细的错误处理:

#include <glob.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define PATTERN "/home/root/logs/*.UBX"

int main() {
    glob_t globbuf;
    int fd;

    // 使用glob函数解析通配符
    // GLOB_ERR:遇到错误时立即返回,不继续匹配
    int ret = glob(PATTERN, GLOB_ERR, NULL, &globbuf);
    if (ret != 0) {
        switch(ret) {
            case GLOB_NOMATCH:
                fprintf(stderr, "错误:没有找到匹配的.UBX文件\n");
                break;
            default:
                fprintf(stderr, "glob函数执行失败,错误码:%d\n", ret);
                break;
        }
        return EXIT_FAILURE;
    }

    // 检查匹配结果(根据你的描述应该只有一个文件)
    if (globbuf.gl_pathc == 0) {
        fprintf(stderr, "错误:没有找到任何.UBX文件\n");
        globfree(&globbuf);
        return EXIT_FAILURE;
    } else if (globbuf.gl_pathc > 1) {
        fprintf(stderr, "警告:找到多个.UBX文件,将使用第一个:%s\n", globbuf.gl_pathv[0]);
    }

    // 打开匹配到的第一个文件
    fd = open(globbuf.gl_pathv[0], O_RDONLY);
    if (fd == -1) {
        perror("open函数执行失败");
        globfree(&globbuf);
        return EXIT_FAILURE;
    }

    printf("成功打开文件:%s,文件描述符:%d\n", globbuf.gl_pathv[0], fd);

    // 这里可以添加你的文件操作逻辑,比如读取内容等

    // 关闭文件并释放glob分配的内存
    close(fd);
    globfree(&globbuf);

    return EXIT_SUCCESS;
}

代码说明:

  • glob()函数会把匹配到的文件名存储在globbuf.gl_pathv数组中,globbuf.gl_pathc是匹配到的文件总数。
  • 我们覆盖了多种错误场景:没有匹配到文件、glob执行出错、打开文件失败等,避免程序崩溃或出现未知问题。
  • 最后一定要调用globfree()释放资源,防止内存泄漏。

如果你不想用glob(),也可以用scandir()遍历目录,手动筛选.UBX后缀的文件,但glob()更简洁直接,专门适配通配符匹配的需求。

内容的提问来源于stack exchange,提问作者Lightsout

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:29:23