0

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

4

1 回答 1

1

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

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

readdir_r是线程安全的,但使用起来非常痛苦,特别是因为您必须分配自己的dirent缓冲区,而且它并不像您想象的那么简单(因为不能保证文件名适合提供的数组在所有情况下,在所有 *nixes 和所有文件系统的结构中)。有一些变通方法,但是当你使用它们时,“不要看,不管发生什么”

到目前为止,我所知道的唯一完全安全且易于使用的功能是scandir:它是线程安全的它基本上为您做所有事情,为您留下一个干净的目录条目数组。虽然它可能不适合所有场合,但它肯定会节省很多你必须自己忍受的痛苦。

于 2012-09-16T20:00:26.843 回答