在阅读了半个小时的手册之后,我想分享我的发现,因为在其他问题中看到很多人只是指向readdir
,这不是线程安全的。
问问题
139 次
1 回答
1
tl;dr 不要使用readdir
orreaddir_r
,它们不安全!使用scandir
.
readdir
不是线程安全的(事实上,它是 POSIX 中唯一已知存在此缺陷的与目录相关的函数)。当然,您可以在简单的程序中使用它,但要小心!
readdir_r
是线程安全的,但使用起来非常痛苦,特别是因为您必须分配自己的dirent
缓冲区,而且它并不像您想象的那么简单(因为不能保证文件名适合提供的数组在所有情况下,在所有 *nixes 和所有文件系统的结构中)。有一些变通方法,但是当你使用它们时,“不要看,不管发生什么”。
到目前为止,我所知道的唯一完全安全且易于使用的功能是scandir
:它是线程安全的,它基本上为您做所有事情,为您留下一个干净的目录条目数组。虽然它可能不适合所有场合,但它肯定会节省很多你必须自己忍受的痛苦。
于 2012-09-16T20:00:26.843 回答