Puis-je utiliser C pour savoir si une opération de fichier est effectuée (et où elle est effectuée) sur le disque au moment de l'exécution?Puis-je utiliser C pour savoir si une opération de fichier est effectuée sur le disque lors de l'exécution?
Répondre
La réponse à votre question dépend de la façon dont vous l'entendiez. Si vous demandez si vous pouvez détecter une opération physique sur le disque (rechercher, lire ou écrire), la réponse est non. Les disques ont des caches disque pour vous cacher ces opérations au nom de la performance. Vous pouvez savoir quand le cache est modifié en utilisant les mécanismes ci-dessus, mais pas quand l'opération physique est effectuée.
C'est pourquoi nous avons des systèmes de fichiers de journalisation. Même avec la journalisation, cependant, il existe une possibilité de perte de données réelle en cas de défaillance catastrophique et que le cache ne peut pas être sauvegardé.
Parmi les méthodes ci-dessus, j'ai utilisé le FileSystemWatcher, et cela fonctionne très bien. Vous pouvez sélectionner les événements pour lesquels vous souhaitez être informé que votre programme recevra un événement de programme lorsque l'événement de fichier aura lieu. Notez que, au moins sous Windows/C#, l'événement arrive sur un thread distinct, vous devrez donc utiliser des délégués pour signaler le thread principal (ou autre) que l'événement a eu lieu.
Découvrez l'exemple suivant de MSDN: Change Notify Watcher Sample
Vous devez compter sur les API OS spécifiques, que vous pouvez utiliser dans le langage de programmation C.
Comme d'autres l'ont dit ici, il n'y a pas de plate-forme indépendante/de façon standard.
Sur Linux, vous pouvez utiliser l'API inotify. Il y a a tutorial on IBM developerworks.