Comment puis-je écrire quelque chose dans un fichier C++ sans utiliser le cache système et le cache du lecteur? Je veux juste écrire exactement sur le disque dur indépendamment de tous les paramètres du cache du système.Écrire un fichier sans cache système et hdd
Répondre
Sauf si vous écrivez un pilote de périphérique de disque, vous ne pouvez pas garantir qu'il n'y aura aucun cache ou traitement effectué avec votre écriture. La bibliothèque d'exécution C expose fflush(FILE *)
pour cela. Windows a FlushFileBuffers
ainsi qu'un drapeau que vous pouvez passer à CreateFile
(FILE_FLAG_NO_BUFFERING
) (qui lui-même ajoute des restrictions sur ce que vous pouvez faire). Une alternative à essayer de contourner la mise en cache d'écriture consiste à rendre vos structures de données résilientes à une défaillance partielle. Pour les fichiers, une technique courante consiste à écrire l'en-tête du fichier après l'écriture du reste du fichier. En supposant Murphy et non un comportement machiavélique, cela devrait suffire.
Ou utilisez les fonctions de remplacement ou de transaction de fichier fournies par le système d'exploitation (voir ReplaceFile et Transactional NTFS pour Windows).
En fait, cela ne protège même pas contre Murphy. Le réordonnancement commun des écritures entraînera le réordonnement des écritures dans l'ordre physique. Même si l'en-tête est fourni au système d'exploitation en dernier lieu, il se peut que le disque dur soit le premier s'il y a suffisamment de mémoire tampon disponible. Notez que les disques modernes peuvent se réorganiser eux-mêmes, en dehors du système d'exploitation. (SATA NCQ) – MSalters
Sur Linux, vous pouvez passer de O_DIRECT
à open(2)
afin d'essayer d'éviter le cache du système d'exploitation, mais vous n'avez pas le même niveau de contrôle sur le cache du disque.
Cela dépend fortement du système d'exploitation. Sous Windows, vous pouvez spécifier FILE_FLAG_NO_BUFFERING lorsque vous ouvrez le fichier avec CreateFile pour désactiver la mise en cache du système. Vous n'allez pas contourner la mise en cache du disque dur.
Si vous passez à la fois 'FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING', Windows indiquera au disque de contourner sa mise en cache aussi. – MSalters
- 1. écrire un fichier batch pour copier un fichier texte du système Windows au système Unix
- 2. Écrire un fichier PDF dans un système de fichiers iPhone
- 3. Écrire dans un fichier lorsque le cache expire
- 4. Hdd Numéro de série
- 5. Cache système Windows et fichiers volumineux
- 6. Intersystems Routine de cache pour écrire des informations de processus dans un fichier sur un système local?
- 7. JAXP xml analyse et validation sans écrire dans le fichier
- 8. ASP.NET Cache et fichier
- 9. Comment écrire un fichier XML sans en-tête en Python?
- 10. Comment lire un fichier et écrire dans un fichier texte?
- 11. Écrire un appel système pour Linux
- 12. JAVA: lire et écrire un fichier ensemble
- 13. Lire et écrire un fichier dans l'iPhone
- 14. Lire/écrire sur un fichier Plist sans utiliser l'iPhone SImulator?
- 15. utiliser un système de cache avec WordPress
- 16. écrire dans un fichier
- 17. Autorisations pour écrire un fichier
- 18. Délivrer un fichier image généré au client sans écrire le fichier dans un répertoire serveur
- 19. Récupération et écriture d'un fichier au système
- 20. Comment POSTER un fichier sur un serveur REST sans écrire le fichier sur disque avec PHP?
- 21. Écrire un fichier XML (en utilisant XStream) sur un système de fichiers en Java
- 22. AIR - Comment écrire un fichier
- 23. VirtualAlloc ne sur certaines configurations de hdd
- 24. C++ écrire dans un fichier
- 25. Écrire dans un fichier texte
- 26. écrire dans un fichier problème
- 27. Écrire dans un fichier java
- 28. Fichier batch: stocke la sortie des lignes de commande sans écrire dans un fichier?
- 29. Comment écrire un script bash pour rechercher des adresses IP dans un fichier et les écrire dans un autre fichier?
- 30. php, simuler inclure? Système de cache
Ceci est spécifique au système d'exploitation. – Christopher
Il serait probablement utile si vous avez expliqué * pourquoi * vous pourriez vouloir faire cela. En d'autres termes, qu'est-ce que vous essayez vraiment d'accomplir? –
J'ai entendu dire que certaines bases de données fonctionnent comme ceci (donc elles sont sûres que toutes les données sont écrites sur le disque) et je suis juste curieux de savoir si cela peut être fait en pur C++. –