2010-04-12 17 views
0

Plusieurs utilisateurs naviguent sur un site Web 100% programmé en C (CGI). Chaque page Web utilise fopen/fgets/fread pour lire des données communes (comme des barres de navigation) à partir de fichiers. Est-ce que chaque appel à fopen/fgets/fread s'interpèrerait si plusieurs personnes naviguaient sur la même page? Si oui, comment cela peut-il être résolu en C? (Ceci est un serveur Linux, la compilation se fait avec gcc et ce pour un site Web de CGI programmé en C.)Sont fopen/fread/fgets PID-safe dans C?

Exemple:


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

Répondre

5

Sur Linux, il est tout à fait sûr pour plusieurs processus de lire simultanément un fichier.

3

Il est parfaitement sûr de lire à partir de plusieurs processus (dans n'importe quel système moderne).

Un appel à fopen() renvoie un pointeur sur une structure de fichier, ce qui a ses propres membres, comme des drapeaux, la position actuelle, etc.

Vous ne devez prendre soin si quelqu'un modifie le fichier (par exemple: réduire) , tandis que d'autres le lisent. Mais j'imagine que ce n'est pas votre cas.

2

En même temps lit à partir d'un fichier (que ce soit à partir de plusieurs threads - à partir de descripteurs ouverts en supposant séparément - ou de plusieurs processus) est bien défini et autorisé sur tous les principaux systèmes d'exploitation modernes. Ce n'est que écrit dans un fichier qui est mal défini et que vous ne devriez pas essayer de faire sans verrouillage (sauf si vous ajoutez au fichier, comme un journal, et que le système d'exploitation rend ces écritures simultanées bien définies).