vc wrote:'rm' does not open the file, 'rm' removes a directory entry, a directory entry cannot be locked, 'rm' cannot be prevented from happenning. I thought we've been through this...
Locking can only prevent a file from being overwritten as I showed in my example.
VC
Прекрасно. Вернемся к оригинальному вопросу - как выловить что файл был "rm-ed"?
Единственно приходит в голову - периодически чекать директори ентри.
vc wrote:'rm' does not open the file, 'rm' removes a directory entry, a directory entry cannot be locked, 'rm' cannot be prevented from happenning. I thought we've been through this...
Locking can only prevent a file from being overwritten as I showed in my example.
VC
Прекрасно. Вернемся к оригинальному вопросу - как выловить что файл был "rm-ed"? Единственно приходит в голову - периодически чекать директори ентри.
f_evgeny wrote:2. - Думаю можно проверить из программы
Как? Файл постоянно открыт и периодически туда пишется инфо. Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..
Ну да, только так, можно читать директорию, можно пробовать открыть файл из другого процесса. Но я такого не делал, это то, что приходит мне в голову.
Да, кстати, если информация пишется периодически, можно так же периодически его закрывать/открывать.
f_evgeny wrote:2. - Думаю можно проверить из программы
Как? Файл постоянно открыт и периодически туда пишется инфо. Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..
Может просто следит за указателем позиции в фаиле?
А если фаил открыть как "for append" он разве не вернет ошибку при попытке записи в несуществующий уже фаил?
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
f_evgeny wrote:2. - Думаю можно проверить из программы
Как? Файл постоянно открыт и периодически туда пишется инфо. Пока в голову пришло ... нет, ничего не пришло... Разве периодически проверять файл в другом треде..
Может просто следит за указателем позиции в фаиле? А если фаил открыть как "for append" он разве не вернет ошибку при попытке записи в несуществующий уже фаил?
Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!
f_evgeny wrote:Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!
Аха ... проверил уже. Ну для "реал-тайм" полезно таки держать файлы закрытыми основное время. (почему, вероятно, и не сталкивался с такой проблемой).
в реале супруги редко бывают друзьями, так как их отношения подпорчены сексом (с)Роза
Плавали-Знаем! (C)
VladDod wrote:Аха ... проверил уже. Ну для "реал-тайм" полезно таки держать файлы закрытыми основное время. (почему, вероятно, и не сталкивался с такой проблемой).
какой же ето реалтайм? Если порядка 100 записей в секунду. 100 раз открывать-закрывать?
Как бы директори ентри локнуть чтоб нельзя тида писать было. Нет ли такой файл систем?
f_evgeny wrote:Не вернет, для процесса открытый файл так и остается существующим до его (процесса), конца работы. Это по генеральной Юниксовой линии так. И так и должно быть!
А в чём причина, почему это так однозначно правильно?
P.S. Отдельный вопрос-подколка - а почему Вы специально выбираете фразеологию Съездов КПСС?
A. Fig Lee wrote:Как бы директори ентри локнуть чтоб нельзя тида писать было. Нет ли такой файл систем?
А в чём состоит исходная задача решение которой упёрлось в базовые принципы операционной системы? Может её как-то иначе можно решать - без смены файловых систем?
Наверное, я плохой рассказчик - чтото никто не может понять что надо.
Есть файл, который открывается программой и туда постоянно пишется инфо.
Если удалить файл после того как программа открыла файл, программа пишущая в файл понятия об етом иметь не будет, а хотелось бы. Или чтоб его удалить было нельзя.
A. Fig Lee wrote:Есть файл, который открывается программой и туда постоянно пишется инфо. Если удалить файл после того как программа открыла файл, программа пишущая в файл понятия об етом иметь не будет, а хотелось бы. Или чтоб его удалить было нельзя.
А почему уже упоминавшееся решение c chmod не подходит? Также можно перед закрытием файла убедиться, что его имя в директории не изменилось (я, правда, не знаю, есть ли в POSIX API, который позволяет это делать по открытому хендлу.) Если же оно изменилось, то произвести какие-то осмысленные действия. Например, попробовать переименовать его в исходное имя.
A. Fig Lee wrote:Наверное, я плохой рассказчик - чтото никто не может понять что надо. Есть файл, который открывается программой и туда постоянно пишется инфо. Если удалить файл после того как программа открыла файл, программа пишущая в файл понятия об етом иметь не будет, а хотелось бы. Или чтоб его удалить было нельзя.
You can just backup the file name and then attempt to restore it on the program completion:
A. Fig Lee wrote:Есть файл, который открывается программой и туда постоянно пишется инфо. Если удалить файл после того как программа открыла файл, программа пишущая в файл понятия об етом иметь не будет, а хотелось бы. Или чтоб его удалить было нельзя.
А почему уже упоминавшееся решение c chmod не подходит? Также можно перед закрытием файла убедиться, что его имя в директории не изменилось (я, правда, не знаю, есть ли в POSIX API, который позволяет это делать по открытому хендлу.) Если же оно изменилось, то произвести какие-то осмысленные действия. Например, попробовать переименовать его в исходное имя.
'chmod' protects the file contents but it does not protect the file name which is a separate entity (a directory entry).
A. Fig Lee wrote:Прекрасно. Вернемся к оригинальному вопросу - как выловить что файл был "rm-ed"? Единственно приходит в голову - периодически чекать директори ентри.
Какой кошмар, ну прямо каменный век какой-то! А вот в Windows есть замечательная фунция ReadDirectoryChangesW, которая сама все изменения рапортует. В юниксе наверняка есть что-то подобное.