【问题标题】:equivalent of rm –rf in c [duplicate]相当于 c 中的 rm –rf [重复]
【发布时间】:2011-08-07 09:28:15
【问题描述】:

可能的重复:
How to delete a directory and its contents in (POSIX) C?

这是在标准 Linux 环境中。

谢谢!

(我知道rmdir,但这不是我要找的。)

【问题讨论】:

    标签: c linux unix


    【解决方案1】:

    system("rm -rf"); 有什么问题?


    更新:由于评论者向他们的 cmets 表明很容易错过重点,让我展开澄清一下:

    if (chdir(dirName) != 0)
      return -1;
    if (system("rm -rf .") != 0)
      return -2;
    

    【讨论】:

    • 事实上它使用的是system,当你在结尾加上一个名字时,你可能会引入非常严重的漏洞......跨度>
    • 考虑一下,当有人给你起一个像 {/,foo}* ~ 这样的名字(尝试只删除备份副本时空格的经典错误)。
    • @R 这超出了问题的范围,不是吗?此外,只要您不检查输入,您的观点就可以适用于任何其他方法。只需 chdir()ing 到您要删除的目录,检查您是否在某个地方恢复正常,然后 system("rm -rf ."); 应该是安全的...
    • 更不用说像foo ; mailx -s 'I resign' my-boss这样的参数(标准命令注入)
    • @TobySpeight 阅读了我在你上面的评论。
    【解决方案2】:

    您需要traverse the directory tree,使用nftw 进行文件树遍历。对于rm -r 示例,首先使用标志FTW_DEPTH 处理内容,然后检查FTW_D 以在目录上使用rmdir,而不是删除或取消链接。当然,这并不能保证您可以删除东西;这通常由包含目录的写权限决定。

    【讨论】:

    • ftw 被更好的nftw 取代。
    猜你喜欢
    • 2013-07-07
    • 2011-02-28
    • 2021-04-09
    • 2021-10-30
    • 2013-01-10
    • 2012-05-13
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多