【发布时间】:2012-02-09 11:06:28
【问题描述】:
我正在编写一些作为工具后端的代码。该工具在固定目录中创建其所有输出。现在假设在任何时候客户想要杀死它的所有应用程序,那么所有文件都应该被删除。所以我使用系统命令(rm -rf)来删除目录,但是打开的文件不会被删除,因此目录也不会被删除。我怎样才能聪明地做到这一点?
一个选项似乎是使用一个表来维护所有打开的文件并在对目录触发rm -rf 之前将它们全部关闭。但是,这可能会减慢整个应用程序的速度。
我探索的另一个选项是使用lsof 查找打开文件的列表并在rm -rf 之前将它们全部关闭。
我的问题的另一个限制是我在一个进程中打开了几个不同的文件,其中一个正在被另一个进程使用。使用上述方法,如果我关闭所有文件描述符并尝试删除目录,从逻辑上讲它不应该被删除,因为还有其他进程打开的文件。
任何建议将不胜感激。
【问题讨论】:
-
@all 请帮我解决这个问题....
-
谁能告诉我 open_max=sysconf(_SC_OPEN_MAX);通过使用这个,我得到的数字是当前进程或系统中所有进程的打开文件描述符数。
-
还有一件事假设我在一个进程中打开了三个不同的文件,其中一个由另一个进程打开,如果我关闭所有 FD 并尝试删除目录,则使用上述方法,从逻辑上讲它不应该因为它仍然被另一个进程打开..请建议
-
打开的文件可以像 linux 上的任何其他文件一样被删除。我认为您忽略了部分问题。文件是否需要超过工具的寿命,或者它们永远不应该超过工具?