C Unix下最快的删除目录
我目前正在研究对I/O非常敏感的代码,从性能角度来看,我正在寻找从C代码中删除Unix下目录的最快方法。我想写一些能在所有通用平台(Android、MacOS X、Linux)上运行的东西,但我愿意为不同风格的Unix编写不同的实现(我怀疑BSD/MacOS X和Linux/Android有不同的技巧) 以下是我想到的几件事:C Unix下最快的删除目录,c,performance,unix,C,Performance,Unix,我目前正在研究对I/O非常敏感的代码,从性能角度来看,我正在寻找从C代码中删除Unix下目录的最快方法。我想写一些能在所有通用平台(Android、MacOS X、Linux)上运行的东西,但我愿意为不同风格的Unix编写不同的实现(我怀疑BSD/MacOS X和Linux/Android有不同的技巧) 以下是我想到的几件事: 在所有平台上,我都可以使用opendir、readdir\u r等工具浏览目录结构,使用dirent->\u d\u type区分目录和文件,这在Linux下似乎是标准
- 在所有平台上,我都可以使用
、opendir
等工具浏览目录结构,使用readdir\u r
区分目录和文件,这在Linux下似乎是标准化的,但在MacOS X下却不是dirent->\u d\u type
- 在Linux/Android下,如果我选择此选项,我还可以使用
和dirfd
快速删除每个文件unlinkat
- 在所有平台上,我都可以使用
遍历目录结构,使用ftw
区分目录和文件flag
- 在所有平台上,我都可以使用
,fts_open
等工具浏览目录结构,使用fts_read
区分目录和文件FTSENT->fts_info
- 我没有检查,但我有一个印象,BSD/MacOS X
函数可以用来删除目录copyfile
/home/pax/porn
,只需将其清除到同一文件系统上的其他地方(/home/no_user/junk/pax/porn
),并启动后台进程以在低优先级进程中清除它
我所说的低优先级,不一定是指CPU咕噜声,更重要的是进程将根据您的需要尽可能减少资源使用
例如,如果您需要在很长一段时间内分散此操作的I/O效果,则可以让进程删除文件或目录,并在这段时间内进行延迟。虽然I/O可能类似于一次删除所有文件,但在短时间跨度内测量的I/O会更少
这种方法的优点是,根据任何查找您“删除”的目录的过程,它几乎立刻就消失了
恢复磁盘空间当然需要一段时间,因为这是以延迟的方式进行的,但这取决于您的相对优先级。您选择的示例目录名可能会冒犯某些读者+请注意,答案是“色情”,在本例中,实际上是研究进行性视网膜外坏死的数据文件,只是一个有趣的巧合,首字母缩略词出现了——如果是其他的话,我妻子会很不高兴。我喜欢你的答案。不幸的是,在我的情况下,推迟删除可能会产生不必要的副作用–一些数据是出于隐私原因而被删除的,因此通知用户该数据已被删除,而实际上可能正在等待删除可能不是一个好主意(请参见示例)。实际上,剩下的唯一问题是在进程退出时刷新所有内容。尽管如此,仍然很重要:)@Yoric,你的代码不必撒谎:-)你可以简单地声明数据正在被删除,并且他们可以在删除数据时继续进行操作。您甚至可以在完成后发送电子邮件(或以其他方式进行通信),因为执行删除的脚本可能非常复杂。