1

我目前在我的 CGI 网站上使用 dirent.h 和 ftw.h 进行目录遍历,100% 用 C 编程。我不确定它们是否是过程安全的;各种用户在我的网站上会互相干扰吗?

为此,您会推荐哪些功能?

4

2 回答 2

1

例如,多个进程可以安全地使用ftw()同时遍历同一个目录树。

然而,一个进程遍历目录树而另一个进程正在更新相同的目录树结构(即添加、删除或重命名目录)并不一定是安全的。如果你有这种情况,那么你需要让你的 CGI 进程使用一个flock()咨询锁(你可以在共​​享目录树的根目录中只有一个空的锁文件;想要遍历树的进程必须使用共享锁在该锁定文件上,并且想要更改树的进程必须对该锁定文件进行排他锁定)。

于 2010-05-07T01:23:57.303 回答
0

您可能的意思是“线程安全”而不是进程安全。所有 libc 调用在 Linux 上都是进程安全的,因为进程(通常)存在于单独的内存空间中。另一方面,readdir它不是线程安全的,因为它为上下文保留了一个内部静态存储。在这种情况下使用readdir_r(_r 表示可重入)。中的其他函数dirent.h默认是可重入的。

于 2010-05-06T18:59:50.280 回答