安全地阅读目录内容

时间:2010-03-23 16:45:16

标签: c file filesystems

在此目录中创建或删除文件时,通过readdir()或scandir()读取目录条目是否安全?我应该更喜欢一个吗?

编辑:当我说“安全”时,我的意思是这些功能返回的条目有效,可以在不破坏程序的情况下进行操作。

感谢。

2 个答案:

答案 0 :(得分:2)

这取决于你所说的“安全”。它们是安全的,因为它们不应该使程序崩溃。但是,如果您在读取/扫描该目录时创建/删除文件,则您获取的文件集可能不是最新的。

当读取/扫描目录条目的目录时,文件指针(目录只是一种特殊类型的文件)向前移动。但是,根据文件系统的不同,可能没有什么可以阻止在文件指针后面的空目录条目槽中创建新文件。因此,readdir()/ scandir()可能无法立即检测到新添加的目录条目。类似的推理适用于文件删除/目录条目删除。

希望这有帮助。

答案 1 :(得分:1)

您对安全的定义是什么?你不会崩溃系统,readdir / scandir不会崩溃你的程序。虽然它们可能会为您提供即时过时的数据。

读取目录的常用语法是,如果从头到尾读取目录,您将看到在此期间没有更改的所有文件一次,您将看到创建或删除的文件在那段时间最多一次。

在类UNIX系统上,readdir()和scandir()是在相同的底层系统调用之上实现的库函数(Linux中的getdents(),BSD中的getdirentries())。所以他们在这方面的行为应该没有多大差别。我认为readdir()更标准,因此更便携。