用什么函数枚举Linux中的目录内容?

时间:2012-09-16 19:59:53

标签: c linux

在阅读手册半小时后,我想分享我的发现,看到其他问题中的许多人只指向readdir,这不是线程安全的。

1 个答案:

答案 0 :(得分:1)

tl; dr 不要使用readdirreaddir_r ,它们不安全!使用scandir

readdir不是线程安全的(实际上,它是POSIX中唯一一个已知存在这个缺陷的与目录相关的函数)。当然,你可以在简单的程序中使用它,但要小心!

readdir_r是线程安全的,但使用起来非常痛苦,特别是因为你必须分配自己的dirent缓冲区,而且它并不像你想象的那样直截了当(因为它不是保证文件的名称适合所有* nixes和所有文件系统中所有情况下的结构内提供的数组)。 There are workarounds,但是当您使用它们时,“看看,无论发生什么”

到目前为止,我所知道的唯一完全安全且直接使用的功能是scandir:它是线程安全的它基本上为你做了一切,让你有一个干净的数组目录条目。虽然它可能不适合任何场合,但它绝对可以减轻你自己忍受的许多痛苦。