在C语言中删除原始文件的符号链接

3

我正在编写一个使用*NIX系统调用的C程序。现在,当用户调用删除特定文件时,我希望将创建的所有符号链接也一并删除。这该如何实现?


你为什么想要删除符号链接?保留它们是合法的!(用户可以通过在它们上面写入内容来重新创建文件) - Basile Starynkevitch
根据问题描述,我需要模拟一个云存储,在这个存储中,用户可以分享文件给其他用户。因此,当原始文件被删除时,删除符号链接会很好。 - Amrith Krishna
1
不,这并不好,而且也是错误的。你的用户正在使用符号链接进行他们通常的行为。留给他自己处理和操作悬挂的符号链接的责任和自由。这是他的系统(所以他应该管理它),而不是你的! - Basile Starynkevitch
2个回答

5

除非你搜索整个目录树,或者你有其他方法知道这些符号链接的位置,否则你无法找到它们。一个文件并不“知道”哪些符号链接指向它。你必须自己找到每个符号链接并使用unlink()函数解除链接。


4

没有办法直接获取指向特定文件的符号链接列表,除非“费力气”的方法,即递归遍历整个文件系统(或者你知道符号链接子集所在的文件系统)并确定是否有任何链接指向该文件。你最好将此任务外包给find实用程序。


是否有可能知道该文件的链接数量,或者至少知道符号链接存不存在? - Amrith Krishna
不,你可以通过inode告诉硬链接的数量。但这并不能告诉你任何关于符号(软)链接的信息。 - abligh
1
符号链接也可以存在于其他文件系统中,因此您还必须扫描其他已挂载的文件系统,以及可能在某些时候已挂载的未挂载的文件系统。 - Brandin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接