Écrire un appel système écrit-il les données directement sur le disque?

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.