2010-10-25 5 views
0

Je suis curieux de savoir ce qui se passe dans ce scénario. Supposons que j'ouvre un fichier à lire et commence à lire le contenu dans une boucle. Que se passe-t-il si un autre processus commence à être ajouté au fichier pendant que je le lit? Que se passe-t-il si un autre processus commence à être ajouté au fichier pendant que je le lis?Lecture dans un fichier en cours de modification

Répondre

1

Sous UNIX/Linux:

Tous les processus ne voient que le fichier en tant que groupe d'octets d'une longueur. Si quelqu'un d'autre modifie les octets ou modifie la longueur, tous les autres processus voient immédiatement ces nouvelles données.

Un fichier ouvert fait référence à un inode. Si vous créez un fichier complètement nouveau, c'est un nouvel inode. Si vous renommez le nouveau fichier sur l'ancien fichier, le nom de fichier dans le répertoire référence maintenant le nouvel inode, alors que l'ancien inode est ouvert (même s'il ne peut plus être vu car il n'est lié à aucun répertoire.) Dans ce cas, vous continuez à voir l'ancien fichier et tout processus ouvrant/modifiant le nouveau fichier ne voit que le nouveau fichier.

+0

Donc, le processus qui exécute le code ci-dessus n'a pas comment obtenir sa propre copie du fichier de l'OS pendant qu'il est en cours de lecture? Le code ci-dessus pourrait boucle indéfiniment si d'autres processus sont constamment ajoutés au fichier? – mellowsoon

+1

"Le code ci-dessus pourrait-il être bouclé pour toujours si d'autres processus sont constamment ajoutés au fichier?" Oui. Voir queue -f qui repose sur ce comportement. –

Questions connexes