Answers:
两者都是unlink()
系统调用相同基本功能的包装。
权衡用户空间实用程序之间的差异。
rm(1)
:
unlink(1)
:
rm(1)
多个参数相比,速度较慢。您可以通过以下方式证明差异:
$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
但是,如果我们要谈论的是对系统unlink(2)
函数的纯朴调用,我现在意识到这可能不是您要解决的问题。
您可以unlink()
在目录和文件上执行系统。但是,如果目录是其他目录和文件的父目录,则到该父目录的链接将被删除,但子目录将悬空。这不理想。
编辑:
抱歉,澄清了unlink(1)
和之间的区别unlink(2)
。平台之间的语义仍然会有所不同。
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
。如果取消链接父目录,则子级占用的空间应该丢失,直到fsck发现差异为止。