J’ai lu quelques questions ( ici ) liées à cela, mais il y a toujours une certaine confusion.
D’après ce que je comprends, cet appel système d’écriture place les données dans le Buffered Cache
(caches de système d’exploitation, comme indiqué dans cette question). Lorsque le Buffered Cache
est plein, il est écrit sur le disque.
Les entrées-sorties en mémoire tampon constituent une optimisation supplémentaire. Il met en cache dans les C RTL buffers
et quand ils sont pleins un appel système d’ write
émis pour déplacer le contenu dans le Buffered Cache
. Si j’utilise fflush
données relatives à ce fichier présent dans les C RTL buffers
, ainsi que le Buffered Cache
sont envoyés au disque.
Ma compréhension est-elle correcte?
La façon dont les tampons stdio sont vidés dépend de la bibliothèque C standard que vous utilisez. Pour citer la page de manuel Linux :
Notez que fflush () vide uniquement les tampons d’espace utilisateur fournis par la bibliothèque C. Pour que les données soient physiquement stockées sur le disque, vous devez également vider les mémoires tampons du kernel, par exemple avec sync (2) ou fsync (2).
Cela signifie que sur un système Linux, utiliser fflush
ou déborder du tampon appellera la fonction write
. Mais le système d’exploitation peut conserver des tampons internes et ne pas écrire les données sur le périphérique. Pour vous assurer que les données sont réellement écrites sur le périphérique, utilisez les commandes fflush
et fsync
bas niveau.
Edit: Réponse reformulée.