如何安全地实现文件树遍历(C语言)

丹妮拉·史密诺夫(Danila Smirnov)

我试图在Fedora这个代码,但得到No such file or directoryPermission denied错误。

如何处理错误并继续扫描文件系统?

如果出现问题,ftw()会崩溃。如何跳过不良条目?

ftw()从path开始/

#define _XOPEN_SOURCE 500
#include <stdio.h>
#include <ftw.h>
#include <time.h>

FILE * output;

static int display_info(const char * fpath, const struct stat * st, int tflag)
{
    switch(tflag){
        case FTW_F://ok, file
            break;
        case FTW_D://ok, directory
            break;
        case FTW_SL://symlink
            return -1;
        case FTW_NS://stat failed
            return -1;
        case FTW_DNR://read failed
            return -1;
    }
    fprintf(output, fpath);
    fprintf(output, "\n");
    return 0;
}
int main(int argc, char * argv[])
{
    time_t t0;
    time(&t0);
    output = fopen("/home/sad/output.txt", "w");
    if(argc < 2){
        printf("Usage: %s [path]\n", argv[0]);
        return -1;
    }
    if(ftw(argv[1], display_info, 99) == -1){
        perror("???ftw()");
        return -1;
    }
    fclose(output);
    time_t t1;
    time(&t1);
    printf("%.3f seconds\n", difftime(t1, t0));
    return 0;
}
列夫·M。

每当display_info无法访问传递给的路径时,您的代码都会返回-1 ,因此ftw它应该执行的操作也确实如此-停止遍历。

如果您希望它继续下去,即使在这种情况下,也请继续返回0。

更好的解决方案是使用更新,更高级的功能nftw

它将允许您既指定标志以自动忽略动态链接,也允许您的回调函数指定一些不可操作的操作。

例如,您可以要求它忽略无法访问的目录的子级:

    case FTW_NS://stat failed
        return FTW_SKIP_SUBTREE;
    case FTW_DNR://read failed
        return FTW_SKIP_SUBTREE;

默认情况下,在几乎所有Linux发行版中,当您从/遍历时,除非以root身份运行或使用,否则某些文件夹将不可访问sudo

此外,某些文件将不是真实文件,您可能想利用这个机会FTW_SKIP_SUBTREE来跳过诸如proc和的文件夹dev

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何安全地重构动态语言?

来自分类Dev

如何使用套接字安全地实现通知系统?

来自分类Dev

安全地粉碎文件

来自分类Dev

如何安全地将API凭据存储在GitHub上共享的C#文件中?

来自分类Dev

如何在WPF C#应用程序中安全地部署PPK文件?

来自分类Dev

如何安全地更新在多个位置打开的文件?

来自分类Dev

如何使用Net :: OpenSSH安全地写入远程文件

来自分类Dev

如何安全地存储api密钥,模板文件

来自分类Dev

如何安全地从git repo删除新文件

来自分类Dev

如何安全地提取不受信任的tar文件?

来自分类Dev

如何安全地从Zenity获取多个文件名?

来自分类Dev

如何使用Net :: OpenSSH安全地写入远程文件

来自分类Dev

如何在php中安全地取消链接文件?

来自分类Dev

如何安全地将pdf文件嵌入html中?

来自分类Dev

如何安全地允许PHP脚本保存文件?

来自分类Dev

如何在C ++上安全地访问向量?

来自分类Dev

如何安全地调用TerminateThread和FreeLibrary(WinAPI,C ++)

来自分类Dev

如何安全地使用C中的枚举?

来自分类Dev

C#-如何安全地存储我的ConnectionString

来自分类Dev

如何使用表达式树安全地访问可为空的对象的路径?

来自分类Dev

如何安全地从git存储库中签出临时工作树?

来自分类Dev

Bash安全地从文件获取变量

来自分类Dev

安全地搜索和删除文件

来自分类Dev

如何安全地实现Facebook登录和设计数据库?

来自分类Dev

如何在Java桌面应用程序中安全地实现SQL查询

来自分类Dev

如何安全地实现Facebook登录和设计数据库?

来自分类Dev

如何将FTP凭据安全地实现到android应用中?

来自分类Dev

使用 identityserver4 和 aspnet 身份时如何安全地实现空闲超时?

来自分类Dev

如何安全地访问和存储活动python文件中使用的主安全密钥?

Related 相关文章

  1. 1

    如何安全地重构动态语言?

  2. 2

    如何使用套接字安全地实现通知系统?

  3. 3

    安全地粉碎文件

  4. 4

    如何安全地将API凭据存储在GitHub上共享的C#文件中?

  5. 5

    如何在WPF C#应用程序中安全地部署PPK文件?

  6. 6

    如何安全地更新在多个位置打开的文件?

  7. 7

    如何使用Net :: OpenSSH安全地写入远程文件

  8. 8

    如何安全地存储api密钥,模板文件

  9. 9

    如何安全地从git repo删除新文件

  10. 10

    如何安全地提取不受信任的tar文件?

  11. 11

    如何安全地从Zenity获取多个文件名?

  12. 12

    如何使用Net :: OpenSSH安全地写入远程文件

  13. 13

    如何在php中安全地取消链接文件?

  14. 14

    如何安全地将pdf文件嵌入html中?

  15. 15

    如何安全地允许PHP脚本保存文件?

  16. 16

    如何在C ++上安全地访问向量?

  17. 17

    如何安全地调用TerminateThread和FreeLibrary(WinAPI,C ++)

  18. 18

    如何安全地使用C中的枚举?

  19. 19

    C#-如何安全地存储我的ConnectionString

  20. 20

    如何使用表达式树安全地访问可为空的对象的路径?

  21. 21

    如何安全地从git存储库中签出临时工作树?

  22. 22

    Bash安全地从文件获取变量

  23. 23

    安全地搜索和删除文件

  24. 24

    如何安全地实现Facebook登录和设计数据库?

  25. 25

    如何在Java桌面应用程序中安全地实现SQL查询

  26. 26

    如何安全地实现Facebook登录和设计数据库?

  27. 27

    如何将FTP凭据安全地实现到android应用中?

  28. 28

    使用 identityserver4 和 aspnet 身份时如何安全地实现空闲超时?

  29. 29

    如何安全地访问和存储活动python文件中使用的主安全密钥?

热门标签

归档