J'essaie de permettre à deux processus différents de communiquer en utilisant le mappage mémoire du même fichier. Cependant, j'ai quelques problèmes avec cela. J'ai un sentiment que cela a à voir avec la façon dont j'utilise l'appel open() et en passant mon descripteur de fichier à mmap.Utilisation de mmap sur un fichier
Voici mon code, pouvez-vous voir quelque chose de mal à ce sujet?
objet 1 Code de:
16 FILE* temp = fopen(theSharedFileName, "w");
17 fseek(temp, fileSize-1, SEEK_SET);
18 fprintf(temp, "0"); // make the file a certain size
19 fseek(temp, 0, SEEK_CUR);
20
21 int sharedFileName = fileno(temp);
...
31 sharedArea = (MyStruct*)mmap(0, fileSize,
32 PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED, sharedFileName, 0);
J'utilise le mode fichier « w » depuis l'objet 1 ne jamais être fait une fois et je le veux pour réinitialiser toutes les données existantes.
Code objet de 2:
130 FILE* tempFile = fopen(sharedFileName, "a");
131 int theFile = fileno(tempFile);
...
135 sharedArea = (MyStruct*)mmap(NULL, fileSize,
136 PROT_READ | PROT_WRITE | PROT_EXEC, MAP_SHARED, theFile, 0);
À quels problèmes précis faites-vous face? Pouvez-vous garantir que obj2 n'accèdera jamais au fichier avant que obj1 ne le fasse? – dirkgently
Oui, obj1 est plus un serveur et obj2 est comme un client qui sera démarré plus tard. – samoz