2010-06-22 4 views
2

Je doute dans le scénario suivantSuppression d'un fichier ouvert dans infini en boucle traiter

Scénario:

Un processus ou un programme commence avec l'ouverture d'un fichier dans un mode d'écriture et entrer dans une boucle infinie dire par exemple: alors que (1) dont le corps a la logique d'écrire dans le fichier ouvert.

Problème: Que faire si je supprime le fichier bientôt ouvert ou créé après le processus entre dans la boucle infinie

Répondre

4

Sous Unix, les utilisateurs vraiment ne peuvent pas supprimer les fichiers, ils peuvent uniquement supprimer des références aux fichiers. Le noyau supprime le fichier lorsqu'il n'y a plus de références (liens durs et descripteurs de fichiers ouverts) à gauche.

+0

Merci pour votre réponse et si elle est supprimée en tant qu'utilisateur root – Fedrick

+0

root est juste un utilisateur. Seul le noyau sait quand un fichier peut être supprimé. – ninjalj

0

Ajouter une ligne qui vérifie si le fichier existe au cours de la boucle while. Si ce n'est pas le cas, tuez la boucle.

1

D'après ce que vous dites, il semble que, en réalité, vous ne voulez pas une boucle infinie, mais plutôt une boucle while avec un certain drapeau, quelque chose à l'effet de

while (file exists) 
    perform operation 
+0

Je ne pense pas que c'est applicable à la question - la question était: que faire si j'ouvre un fichier, entrer en mode écriture, puis entrer une boucle infinie. Ainsi, une fois que la boucle a été entrée, je suppose que le fichier existe bien car il vient juste d'être ouvert. Il n'y avait nulle part dans la question que la réouverture et la fermeture se feraient dans la boucle, donc je ne crois pas que ce serait un problème. – AndyPerfect

+0

Bien sûr, il existe, mais il n'aura pas le lien (nom de fichier) qui a été "supprimé" (dissocié, vraiment), mais sur Linux, vous serez toujours en mesure d'y accéder via/proc//fd/ ninjalj

+0

Excellent , merci pour toutes vos réponses – Fedrick

0

Il semble que ce arrive, c'est que votre fichier disparaît (fondamentalement).

Essayez cela, créez un test.py de fichier et mettre ce qui suit dans le:

import os 
f = open('out.txt', 'w') # Open file for writing 
f.write("Hi Mom!") # Write something 
os.remove('out.txt') # Delete the file 
try: 
    while True: # Do forever 
     f.write("Silly English Kanighit!") 
except: 
    f.close() 

puis $ python test.py et appuyez sur Entrée. Ctrl-C devrait arrêter l'exécution. Cela va ouvrir, puis supprimer le fichier, puis continuer à écrire dans le fichier qui n'existe plus, pour les raisons qui ont été mentionnées précédemment.

Cependant, si vous avez vraiment une autre question comme "Comment puis-je empêcher que mon fichier ne soit accidentellement supprimé pendant que j'écris dessus?" ou quelque chose d'autre, il est probablement préférable de poser cette question.

+0

De grossière, elle ne "disparaît" que si elle n'est pas très grande. Essayez de supprimer un fichier de plusieurs gigaoctets qui est toujours référencé. Il est assez visible que le fichier est toujours là, seul le nom de fichier a vraiment disparu. – ninjalj

+0

Bien sûr. Et si vous voulez vraiment devenir technique une fois que vous avez supprimé le fichier (à moins que vous n'ayez fait un de ces overwriters fantaisie), il est toujours là;) –