2010-04-12 43 views
0

不同的用戶正在瀏覽C(CGI)中100%編程的網站。每個網頁使用fopen/fgets/fread從文件中讀取常用數據(如導航欄)。如果不同的人瀏覽同一個頁面,每個人都會打電話給fopen/fgets/fread進行干擾嗎?如果是這樣,這怎麼能在C中解決? (這是一個Linux服務器,編譯與海灣合作委員會完成,這是用C編程的CGI網站)C中的Fopen/fread/fgets PID安全嗎?

例子:


FILE *DATAFILE = fopen(PATH, "r"); 
if (DATAFILE != NULL) 
{ 
    while (fgets(LINE, BUFFER, DATAFILE)) 
    { 
     /* do something */ 
    } 
} 

回答

5

在Linux上,這是完全安全的多個進程同時讀取一份文件。

3

從多個進程讀取(在任何現代系統中)是完全安全的。

的調用fopen()函數返回一個指向文件結構,它有自己的成員,如標誌,當前位置等

如果有人更改了文件,您應該只關心(例如:收縮) ,而其他人正在閱讀它。但我想這不是你的情況。

2

並行從文件中讀取(無論是來自多個線程 - 假設來自單獨打開的描述符 - 或來自多個進程)在所有現代主要操作系統上都有良好的定義和允許。只有併發寫入文件的定義不明確,並且您不應該嘗試在沒有鎖定的情況下嘗試執行操作(除非您將文件附加到日誌中,並且操作系統會使此類併發寫入定義良好)。