首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用nftw只遍历指定的文件夹。

使用nftw只遍历指定的文件夹。
EN

Stack Overflow用户
提问于 2022-04-08 13:32:42
回答 1查看 171关注 0票数 0

我正在使用nftw()进行目录遍历。现在,我只想列出指定目录中的所有文件,但是似乎不管所有文件夹下的是什么文件。即使我指定了FTW_PHYS,似乎nftw仍然遍历。

周围唯一的工作就是设置

代码语言:javascript
复制
if (ftwbuf->level > 1) {
    return;
}

在调用的函数中。但是,它仍在所有这些目录上调用此函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-08 15:56:03

  1. 在任何包含指令之前启用GNU。

代码语言:javascript
复制
#define _GNU_SOURCE

在调用

  1. 之前,在标志中启用FTW_ACTIONRETVAL。这使nftw()能够根据来自callback_function().

的返回值追索其执行。

代码语言:javascript
复制
/* snippet from nftw manpage */
#define MAX_OPEN_FDS    64
    flags |= FTW_ACTIONRETVAL; // enables callback_function() to recourse 
    if (nftw ((argc < 2) ? "." : argv[1], callback_function, MAX_OPEN_FDS, flags)
            == -1) {
        perror ("nftw");
        exit (EXIT_FAILURE);
    }

如果目录高于所需的级别,则

  1. callback_function()开始时跳过目录。

代码语言:javascript
复制
#define DEPTH_LIMIT 1
/*
...
*/
int
callback_function (const char *fpath, const struct stat *sb,
              int tflag, struct FTW *ftwbuf) {
// works even when FTW_DEPTH is enabled.
// at the top first condition to check; 
if (ftwbuf->level > DEPTH_LIMIT) return FTW_SKIP_SIBLINGS;
/*
...
*/
    return FTW_CONTINUE;
}

每当

  1. 返回一个跨越DEPTH_LIMIT的目录中的文件时,FTW_SKIP_SIBLINGS指示它跳过该目录并继续与父目录中的兄弟姐妹在一起。

如果您省略了

  1. 中的FTW_DEPTH,则可以使用FTW_SKIP_SUBTREE功能;nftw()将跳过一个目录。

代码语言:javascript
复制
- `FTW_DEPTH` instructs `nftw()` to pass the directory itself **after** going through all files & sub-directories in it. This `post-order` traversal of directories makes it difficult to use `FTW_SKIP_SUBTREE`;
代码语言:javascript
复制
// without `FTW_DEPTH` in nftw-flags 
int
callback_function (const char *fpath, const struct stat *sb,
              int tflag, struct FTW *ftwbuf) {
/*
...
*/
    if (DEPTH_LIMIT == ftwbuf->level && FTW_D == tflag) // a directory
        return FTW_SKIP_SUBTREE; // don't get into the directory
    else
        return FTW_CONTINUE;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71797970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档