假设c.txt
位于目录b
。 unlink c.txt
很容易,系统只删除目录b
中的条目{XXX, c.txt}
。但是如果b
是a
的子目录,而我想取消链接b
会发生什么情况,程序是相同还是更复杂?取消链接目录时会发生什么情况?
回答
从手册页之间的连结:
When the utility is called as unlink, only one argument,
which must not be a directory, may be supplied.
因此,在使用时取消链接,你不能将目录作为参数。
unlink(2)
只能删除一个文件,而rmdir(2)
只能删除空目录。
如果要递归删除目录,则必须智能地使用两个系统调用。您可能会发现许多不同的递归删除实现,例如this one正在使用nftw
,或者this one正在使用opendir
/readdir
。
假设我们有“a/b/c”,并且还有另一个“d/e”,其中e是c的硬链接,如果我们删除目录a及其子内容,那么e指向的是无效的? – stonestrong 2013-03-11 13:04:27
我提到“计算机系统设计原理”,在这种情况下,e最终会成为一个不具有破坏性的悬挂参考。 – stonestrong 2013-03-11 13:34:01
@stonestrong如果它是一个/符号/链接,它将以悬挂引用结束,但/ hardlink /将导致该文件的使用计数仍为1,因此文件仍然存在。你可以自己试试这个:'mkdir -p a/b; echo你好,世界\! > a/b/c; mkdir d; ln -s ../a/b/c d/e; ln a/b/c d/f; rm -rf a; cat d/e;猫d/f' – RolKau 2013-11-13 13:04:22
- 1. 如果DTD链接无处可逃,会发生什么情况?
- 2. 发生病情时会发生什么情况?
- 3. 当我取消发布Chrome扩展程序时会发生什么情况
- 4. 取消任务时会发生什么?
- 5. Android - asnctask取消时会发生什么?
- 6. 当您在C++中取消引用字符串时会发生什么情况
- 7. 为什么会发生这种情况?
- 8. 如果消息在MQ中回滚会发生什么情况?
- 9. 会话过期时会发生什么情况?
- 10. mysql没有连接,但为什么会发生这种情况
- 11. 如果将.svn目录从ASCII转换为UTF-8,会发生什么情况?
- 12. 未能获取锁的线程会发生什么情况?
- 13. 执行查询时,后端会发生什么情况?
- 14. 提供配置文件过期时会发生什么情况?
- 15. 当禁用javascript时Stripe会发生什么情况
- 16. 我们在签名时会发生什么情况?
- 17. 当系统关机时,cron作业会发生什么情况?
- 18. 未安装.NET Framework时会发生什么情况?
- 19. ISNULL替换值为NULL时会发生什么情况?
- 20. 自动增量列用完时会发生什么情况?
- 21. 容器关闭时睡眠线程会发生什么情况?
- 22. 如果超时,会发生什么情况?
- 23. 超过MaxKeepAliveRequests限制时会发生什么情况?
- 24. 当数据库脱机时,symfony会发生什么情况?
- 25. .net应用程序启动时会发生什么情况?
- 26. iframe打开新窗口时会发生什么情况?
- 27. 为什么有时会在Eclipse中发生这种情况?
- 28. CookieAuthenticationOptions中的validateInterval过期时会发生什么情况
- 29. 更改文档时窗口事件会发生什么情况?
- 30. 在Excel中双击单元格时会发生什么情况?
当谈到Unix文件系统为什么只允许指向文件的链接而不是目录时,'计算机系统设计原理'给出了一个取消链接目录的例子,它在第100页。如果这个例子不合适,有没有更好的解释? – stonestrong 2013-03-11 13:11:05