gpt4 book ai didi

C: 使用 nftw 指定最大搜索深度

转载 作者:太空宇宙 更新时间:2023-11-04 08:20:00 26 4
gpt4 key购买 nike

在 C 中,有没有办法指定 nftw 将搜索的基本目录的最大深度?例如,假设我要搜索的目录 dir 有一个 sub-subdirectory,但我只希望 nftw 通过 subdir 搜索而不是 sub-subdir,或低于它的任何内容。

dir
\_ subdir
|__ file1
|__ file2
\_ sub-subdir
|__ file1
|__ file2
\_ file3

最佳答案

根据手册页 (http://man7.org/linux/man-pages/man3/nftw.3.html),您可以停止从函数参数内部进入子目录。

根据手册中报告的示例,子目录中限制为 2 级,源代码为:

#define _XOPEN_SOURCE 500
#include <ftw.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>


// max num of sub dirs
#define MAXLEVEL 2

static int display_info(const char *fpath, const struct stat *sb,
int tflag, struct FTW *ftwbuf)
{
// if the depth is above the max sub dirs, continue to next file
if (ftwbuf->level > MAXLEVEL) {
return 0;
}
printf("%-3s %2d %7jd %-40s %d %s\n",
(tflag == FTW_D) ? "d" : (tflag == FTW_DNR) ? "dnr" :
(tflag == FTW_DP) ? "dp" : (tflag == FTW_F) ? "f" :
(tflag == FTW_NS) ? "ns" : (tflag == FTW_SL) ? "sl" :
(tflag == FTW_SLN) ? "sln" : "???",
ftwbuf->level, (intmax_t) sb->st_size,
fpath, ftwbuf->base, fpath + ftwbuf->base);
return 0; /* To tell nftw() to continue */
}

int main(int argc, char *argv[])
{
int flags = 0;

if (argc > 2 && strchr(argv[2], 'd') != NULL)
flags |= FTW_DEPTH;
if (argc > 2 && strchr(argv[2], 'p') != NULL)
flags |= FTW_PHYS;

if (nftw((argc < 2) ? "." : argv[1], display_info, 20, flags) == -1) {
perror("nftw");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}

关于C: 使用 nftw 指定最大搜索深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33835652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com