scandir真的线程安全吗?

时间:2013-11-18 18:13:36

标签: c io thread-safety readdir scandir

UNIX® System Threads Reference中,在“线程安全”标题下的一系列函数“不保证在所有UNIX系统上都是线程安全的”。此列表中不存在函数scandir(),而列表中显示readdir()。

然而,scandir()的glibc source显然似乎调用了readdir(),而不是线程安全的readdir_r()。因为某些其他原因,scandir()在列表中被省略了,或者由于某种原因我是否缺少线程安全?

2 个答案:

答案 0 :(得分:1)

我认为,此列表仅涵盖POSIX功能。 scandir(3)是BSD / SVID,因此可能不会列在那里。新的线程安全函数可能是此列表的重点,但不列出旧的,线程不安全的函数。

答案 1 :(得分:1)

似乎POSIX.1-2008指定scandir()是线程安全的,因为它是POSIX.1-2008 function,而不是允许非线程安全的函数列表。但是,POSIX.1-2008并不排除readdir()是线程安全的,而在glibc的情况下,readdir() source实际上是线程安全的,因为它不返回全局struct dirent,而是返回DIR调用中返回的opendir()类型的glibc-defined成员。

即使glibc的scandir()调用readdir(),它仍然看起来是线程安全的。