2010-05-06 26 views
1

我目前正在使用dirent.h和ftw.h進行目錄遍歷,我的CGI網站100%使用C編寫。我不確定它們是否安全;各種用戶會在我的網站上互相干擾嗎?什麼C目錄遍歷的頭文件在Linux中是安全的?

你會爲此推薦哪些功能?

+1

你是什麼意思的過程安全? – 2010-05-06 18:38:54

+1

如果你的意思是他們可以安全地同時使用多個進程,是的,他們是。 – WhirlWind 2010-05-06 18:41:13

+0

是的,同時運行多個進程。 – 2010-05-06 20:08:35

回答

1

例如,使用ftw()來同時遍歷相同的目錄樹,多個進程是安全的。

然而它不一定是安全的一個方法是步行目錄樹,而另一個進程是更新相同的目錄樹結構(即增加,刪除或重命名的目錄)。如果你有這種情況,那麼你將需要讓你的CGI進程使用一個flock()諮詢鎖(你可以在共​​享目錄樹的根目錄下只有一個空的鎖文件;想要走樹的進程必須共享鎖定那個鎖文件,並且想要改變樹的進程必須對鎖文件進行獨佔鎖定)。

0

您可能是指「線程安全」而非過程安全。所有libc調用在Linux上都是流程安全的,因爲進程(通常)位於單獨的內存空間中。 另一方面,readdir不是線程安全的,因爲它爲上下文保留內部靜態存儲。在這種情況下使用readdir_r(_r表示可重入)。 dirent.h中的其他功能默認是可重入的。

+0

由於擔心不同的用戶運行相同的CGI腳本(這通常意味着不同的進程,除非涉及FastCGI),他似乎實際上意味着*進程*安全。 – 2010-05-06 19:01:07

+0

是的,過程安全。只是正常的CGI,而不是FastCGI。 – 2010-05-06 20:09:24

+0

那麼在這種情況下,沒有理由擔心,因爲所有的libc函數都是過程安全的。 當然,如果一個進程正在編寫一個文件,並且另一個進程正在讀取同一個文件,用戶仍然可能互相干擾,但這不是您正在做的。 – wump 2010-05-06 21:12:02