-
processus
- (A) ouvre fichiers avec le mode
r+
. - Le processus (B) ouvre le même fichier avec le mode
r+
. - le processus (A) y écrit des données et
fflush()
. - processus (A) notifie le processus (B) pour lire les données.
- processus (B) lit les données. < ---- voici le problème.
obtenu quelques octets inattendus (0000 0000 ...) à la partie de la tête et les octets de gauche sont corrects. PS: La taille des données est d'environ 16k, et je l'écris/lis avec un appel fwrite()
/fread()
.
J'ai également fait un test, c'est-à-dire, si le processus (B) appelle fflush()
avant de lire les données, le résultat est correct.
Ma question est,
- Quelle est la bonne façon de rendre le processus que (B) soit toujours en mesure de obtenir les données mises à jour?
- Comme le processus (A) a déjà appelé
fflush()
, pourquoi le processus (B) nécessite également pour fflush() avant de lire les données?
Toutes les fonctions de gestion de fichiers lisent et écrivent * en mémoire tampon *. Si une partie du fichier est déjà dans les tampons, elle ne sera pas relue à partir du disque, mais renvoyée à partir des tampons. Si vous écrivez dans le même fichier à partir d'un autre processus, les tampons ne seront mis à jour qu'après un fflush() de ce fichier. Vous voudrez peut-être google pour * mécanismes de verrouillage de fichiers *. – tofro
Postez votre code. Vous obtiendrez des réponses réelles de cette façon au lieu de deviner. –