Удаление открытого файла в бесконечном цикле - PullRequest
2 голосов
/ 22 июня 2010

У меня есть сомнения в следующем сценарии

Сценарий:

Процесс или программа начинается с открытия файла в режиме записи и ввода бесконечного цикла, например: while (1), тело которого имеет логику для записи в открытый файл.

Проблема: Что если я удалю открытый или созданный файл вскоре после того, как процесс войдет в бесконечный цикл

Ответы [ 4 ]

4 голосов
/ 22 июня 2010

В Unix пользователи на самом деле не могут удалять файлы, они могут только удалять ссылки на файлы.Ядро удаляет файл, когда не осталось ссылок (жестких ссылок и открытых файловых дескрипторов).

1 голос
/ 22 июня 2010

Из того, что вы говорите, на самом деле кажется, что вы не хотите бесконечный цикл, а скорее цикл с некоторым флагом, что-то с эффектом

 while (file exists)
     perform operation
0 голосов
/ 22 июня 2010

Похоже, что ваш файл исчезает (в основном).

Попробуйте, создайте файл test.py и поместите в него следующее:

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()

, затем $ python test.py и нажмите Enter. Ctrl-C должен остановить выполнение. Это откроет, затем удалит файл, затем продолжит запись в файл, который больше не существует, по причинам, которые были ранее упомянуты.

Однако, если у вас действительно есть другой вопрос, например, «Как я могу предотвратить случайное удаление моего файла во время записи в него?» или что-то еще, вероятно, лучше задать этот вопрос.

0 голосов
/ 22 июня 2010

Добавьте строку, которая проверяет, существует ли файл во время цикла while. Если его не существует, уничтожьте цикл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...