J'utilise un système embarqué sous Linux. J'utilise un système de fichiers ramdisk sur la cible incorporée. Mon application capture des données en temps réel et fait Standard C "fwrite" à un fichier dans ce disque virtuel. Comme il y a une quantité limitée de mémoire, je voudrais définir une taille maximale pour le fichier et provoquer fwrite pour envelopper comme un tampon circulaire. Existe-t-il un moyen de le faire de manière transparente pour l'application? Je préférerais que l'application reste inchangée lorsque je migre vers un système de fichiers sur un périphérique de stockage (eSATA) ayant une capacité beaucoup plus grande.Enveloppe de fichier lors de l'utilisation de fwrite
1
A
Répondre
2
Il n'existe pas de méthode intégrée pour y parvenir.
La meilleure option est probablement d'écrire une petite fonction wrapper qui s'occupe de l'écriture du fichier tout en maintenant le nombre d'octets écrits. Une fois qu'il a atteint la taille maximale que vous avez définie, appelez rewind()
(ou fseek()
etc.) pour revenir au début du fichier.
Il pourrait être plus facile à utiliser mmap()
à la carte mémoire de votre fichier, puis le traiter comme un tampon circulaire. Mais encore une fois vous auriez besoin de mettre en place l'emballage vous-même.
Pour mmap(), voir http://en.wikipedia.org/wiki/Circular_buffer#Optimization – 0x6adb015