【发布时间】:2013-02-23 22:44:48
【问题描述】:
我有一个在 linux 服务器上运行的 c++ 代码。在代码中,我使用函数unlink(filename) 删除文件。由代码本身生成的临时文件已成功删除。但是我手动放置的文件,我的代码无法删除它们。可能是什么原因?
【问题讨论】:
-
my code is unable to delete them- 当您列出目录内容时,您还看到文件名吗?还是您只是观察到磁盘空间仍然被分配而不被回收? -
那个功能我不熟悉,应该是文件权限的问题。
-
@Andreas:是的。即使在执行代码之后,这些文件仍然存在。
-
unlink 确实“强制”删除 - 如果文件权限允许。仅当没有其他目录条目引用同一文件时才会回收空间 - 但应从目录中删除文件名。您真的应该按照@hyde 在答案中的建议检查返回码。
-
关于 Unix 文件系统的重要一点是,
unlink只是删除了目录条目。即使这是指向文件的最后一个条目,如果文件在某个进程中打开,文件本身也不会被删除,直到其他进程实际关闭它(如果长期存在的守护进程继续打开,这可能会产生令人讨厌的磁盘使用泄漏但不关闭大文件)。