7
votes

Plusieurs descripteurs de fichiers dans le même fichier, c

J'ai une application multithreadée qui ouvre et lit le même fichier (ne pas écrire). J'ouvre un descripteur de fichier différent pour chaque thread (mais ils pointent tous vers le même fichier). Chaque thread lit ensuite le fichier et peut le fermer et l'ouvrir à nouveau si EOF est atteint. Est-ce correct? Si j'effectue FCLose () sur un descripteur de fichier, cela affecte-t-il les autres descripteurs de fichiers qui pointent sur le même fichier?


0 commentaires

3 Réponses :


3
votes

C'est bon. Vous pouvez ouvrir toutes les heures que vous souhaitez que le même fichier et que chaque descripteur de fichier soit indépendant des uns des autres.


0 commentaires

0
votes

Cela devrait fonctionner bien, à condition que chaque thread ait sa propre poignée de fichier. Puisque vous mentionnez l'utilisation de fcFose () , cela suggère que vous utilisez également fopen () dans chaque thread et chaque thread n'affecte que son propre fichier * variable.

Y a-t-il un problème?


3 commentaires

Fondamentalement, j'ai créé une gamme de points de fichier à 2 ponts (car chaque thread sera lu, disons, X fichiers), pour un total de threads y. Donc, mon fichier * matry est une matrice [y] [x]. Pour un thread donné, j'ouvre un fichier via fopen (matrice [I] [0]) par exemple (pour le fichier 0). J'ai ensuite lu (Fread) le fichier (pas tous à la fois) et effectuez d'autres tâches (aucune écriture de fichier ne se produit, cependant). Pendant une lecture, si EOF est atteint, je fais de la FLOSE, puis fopen à nouveau. Mon inquiétude était que, quand je pourrais fonger et fopen, puis-je affecter de quelque manière que ce soit sur l'autre fichier * des pointeurs des autres threads pointant vers le même fichier que j'ai effectué F Fermer O


En supposant que votre fopen () est une typo (il devrait être tableau [i] [0] = fopen ...), alors oui, cela fonctionnera bien. À condition que chaque thread ne manipule pas les données appartenant à d'autres threads.


Merci. Oui, tous les threads font dans ces fichiers sont fopen (), Fread () et FLOSE ().



4
votes

Pour les systèmes Linux, vous n'avez pas besoin de plusieurs descripteurs de fichiers pour le faire. Vous pouvez partager un seul descripteur de fichier et utiliser Pays pour faire une opération de recherche / lecture atmériquement sans Modification du descripteur de fichier du tout.


0 commentaires