Intéressant. Pour tester le truc j'ai essayer de créer un code ayant des effets de bord pour voir ce que ça donne...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
int main()
{
char nom[1024];
FILE *fp;
sprintf(nom, "/tmp/essai%d", getpid());
fp=fopen(nom, "a");
fprintf(fp, "essai %d\n", getpid());
fclose(fp);
fork();
printf("Fini (%d)\n", getpid());
} |
J'espérais que si le fork redéroule tout ce qui s'est passé avant, j'aurais alors soit 2 fichiers dans "/tmp", soit un fichier avec 2 lignes. Rien de tout ça...
[edit]
... jusqu'à ce que j'ai l'idée de mettre le fclose
après le fork(). Niveau prog je ne sais pas comment est sensé se comporter ce code où un process ouvre un fichier qui est fermé ensuite par lui et par son fils mais au résultat j'ai eu 2 lignes dans le fichier...
En fait, sous Linux, fork() ne duplique même pas la mémoire sauf si un des processus la modifie (optimisation à donf)
Partager