我目前正在使用dirent.h和ftw.h进行目录遍历,我的CGI网站100%用C语言编程。我不确定它们是否是过程安全的;各个用户在我的网站上会互相干扰吗?
您为此目的会推荐哪些功能?
答案 0 :(得分:1)
多个进程安全,例如,使用ftw()
同时遍历同一目录树。
但是一个进程走路目录树并不一定安全,而另一个进程更新相同的目录树结构(即添加,删除或重命名目录) )。如果你遇到这种情况,那么你需要让你的CGI进程使用flock()
咨询锁(你可以在共享目录树的根目录中只有一个空的锁文件;想要遍历树的进程有对该锁文件采取共享锁,并且想要更改树的进程必须对锁文件进行独占锁定。)
答案 1 :(得分:0)
您可能意味着“线程安全”而不是过程安全。所有libc调用在Linux上都是进程安全的,因为进程(通常)位于不同的内存空间中。
另一方面,readdir
不是线程安全的,因为它为上下文保留了内部静态存储。在这种情况下使用readdir_r
(_r表示可重入)。 dirent.h
中的其他函数默认是可重入的。