在C中强制退出时释放所有打开的文件和目录

时间:2010-02-15 05:44:52

标签: c cygwin

我想在我的程序执行期间打开所有打开的文件和目录。我想这样做,因为我有一个非常大的程序,它打开了许多文件和目录,我无法跟踪。有什么办法吗?意味着我想要检索所有打开的文件和目录的列表,并在退出时关闭它们。

我知道使用atexit()函数注册退出处理程序。可以用它做点什么吗?

修改 我在windows上有cygwin。我想做上面的事情,因为我的程序资源没有被自动释放。我有一个目录,创建然后使用opendir()打开。我的程序完成后,当我尝试删除该目录时,它说“无法删除,被其他程序使用”。但是当我终止explorer.exe并再次重启时,只有我能够删除该目录。

问题是它发生的不均衡。我能删除一些目录而无法删除一些目录。

3 个答案:

答案 0 :(得分:4)

如果“释放”意味着“关闭”,那么无论如何都会发生。 C运行时和操作系统将为您处理。在流程终止时,流程已打开的所有资源都将被关闭。这将是一个非常罕见(质量差)的环境,并没有这样做。

答案 1 :(得分:1)

同时检查_fcloseall()

答案 2 :(得分:1)

man signal应该给你一些提示。这可以捕获大部分终止信号,而不仅仅是普通信号。