Как определить, что файл никто не использует?
От: SergeyLa  
Дата: 08.06.03 08:47
Оценка:
Есть процесс P1 который пишет в файл F(i), i — номер запуска P1.
То есть P1 периодически просыпается, пишет в F(i) и дохнет.
Все F(i) лежат в одной директории.
Независимо от него существует процесс P2, код для которого пишу я.
P2 запускается через виндовый шедуллер (scheduller), мониторит
директорию с F(i). Если находит новый файл выполняет над ним некие
вычисления и погибает. Проблема: когда P2 нашел новый файл и начал над выполнять
вычисления, как понять что в этот же файл не пишет P1. То есть вообще как понять что
данный процесс – единственный пользователь данного файла. Решение нужно посредством
функций WinAPI. Что нибудь вроде фунцкии (вымышленной )
EnumFileProccesses(HANDLE hfile, DWORD * nextproccessid).
Буду благодарен за любые идеи.
Re: Как определить, что файл никто не использует?
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 08.06.03 10:18
Оценка:
Здравствуйте, SergeyLa, Вы писали:

[]

Перебрать все хэндлы файлов и посмотреть их владельцев.
Re: Как определить, что файл никто не использует?
От: Valerio Россия linkedin.com/in/boronin
Дата: 08.06.03 11:11
Оценка:
1) открыть эксклюзивнов P2. если не откроется — кто-то его использует (P1?)
2) завести именованный объект синхронизации (для каждого файда) в P1 и использовать его уникальное имя для синхронизации действий в P2 (если P1 тоже Ваш код и Вы его можете менять конечно)
3) покопать в сторону lock/unlock file's data range
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: Как определить, что файл никто не использует?
От: Аноним  
Дата: 08.06.03 11:57
Оценка:
Здравствуйте, Alexey Shirshov, Вы писали:

AS>Здравствуйте, SergeyLa, Вы писали:


AS>[]


AS>Перебрать все хэндлы файлов и посмотреть их владельцев.



Подскажите, как это сделать.
Re[3]: Как определить, что файл никто не использует?
От: Valerio Россия linkedin.com/in/boronin
Дата: 08.06.03 12:01
Оценка:
AS>>Перебрать все хэндлы файлов и посмотреть их владельцев.


А>Подскажите, как это сделать.

ветка рядом
Автор: SiAVoL
Дата: 06.06.03
?
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re: Как определить, что файл никто не использует?
От: Vadim B  
Дата: 08.06.03 21:30
Оценка:
Здравствуйте, SergeyLa, Вы писали:

SL>Есть процесс P1 который пишет в файл F(i), i — номер запуска P1.

SL>То есть P1 периодически просыпается, пишет в F(i) и дохнет.
SL>Все F(i) лежат в одной директории.
SL>Независимо от него существует процесс P2, код для которого пишу я.
SL>P2 запускается через виндовый шедуллер (scheduller), мониторит
SL>директорию с F(i). Если находит новый файл выполняет над ним некие
SL>вычисления и погибает.

Если есть доступ к коду процесса P1, то почему бы проще не сделать? Процесс P1 просыпается, создает файл tmp_i.p1, пишет в него, закрывает файл, затем переименовывает его в file_i.p1. Второй процесс ищет новые файлы только по маске file_*.p1, отсекая, таким образом, файлы, с которыми еще работает первый процесс. Переименование файла, насколько я понимаю — действие атомарное.
Re: Как определить, что файл никто не использует?
От: avi  
Дата: 09.06.03 03:56
Оценка:
Если P1 создает F(i) без sharing, то можно открыть F(i) в эксклюзивном режиме.

Здравствуйте, SergeyLa, Вы писали:

SL>Есть процесс P1 который пишет в файл F(i), i — номер запуска P1.

SL>То есть P1 периодически просыпается, пишет в F(i) и дохнет.
SL>Все F(i) лежат в одной директории.
SL>Независимо от него существует процесс P2, код для которого пишу я.
SL>P2 запускается через виндовый шедуллер (scheduller), мониторит
SL>директорию с F(i). Если находит новый файл выполняет над ним некие
SL>вычисления и погибает. Проблема: когда P2 нашел новый файл и начал над выполнять
SL>вычисления, как понять что в этот же файл не пишет P1. То есть вообще как понять что
SL>данный процесс – единственный пользователь данного файла. Решение нужно посредством
SL>функций WinAPI. Что нибудь вроде фунцкии (вымышленной )
SL>EnumFileProccesses(HANDLE hfile, DWORD * nextproccessid).
SL>Буду благодарен за любые идеи.
Re: Как определить, что файл никто не использует?
От: avi  
Дата: 09.06.03 03:57
Оценка:
Если P1 создает F(i) без sharing, то можно открыть F(i) в эксклюзивном режиме.

Здравствуйте, SergeyLa, Вы писали:

SL>Есть процесс P1 который пишет в файл F(i), i — номер запуска P1.

SL>То есть P1 периодически просыпается, пишет в F(i) и дохнет.
SL>Все F(i) лежат в одной директории.
SL>Независимо от него существует процесс P2, код для которого пишу я.
SL>P2 запускается через виндовый шедуллер (scheduller), мониторит
SL>директорию с F(i). Если находит новый файл выполняет над ним некие
SL>вычисления и погибает. Проблема: когда P2 нашел новый файл и начал над выполнять
SL>вычисления, как понять что в этот же файл не пишет P1. То есть вообще как понять что
SL>данный процесс – единственный пользователь данного файла. Решение нужно посредством
SL>функций WinAPI. Что нибудь вроде фунцкии (вымышленной )
SL>EnumFileProccesses(HANDLE hfile, DWORD * nextproccessid).
SL>Буду благодарен за любые идеи.
Re: Как определить, что файл никто не использует?
От: free stranger Россия  
Дата: 09.06.03 06:47
Оценка:
Здравствуйте, SergeyLa, Вы писали:

Самый простой способ, это синхронизация. Пусть Р1 в момент начала работы с файлом оздает Mutex а при окончании работы с оным, релизит этот Mutex, а Р2 проверяет наличие Mutex и ждет его завершения.

Если доступа к коду Р1 нет, то можно энумировать процессы c помощью EnumProcesses и при наличии Р1 ждать его завершения.

С регардами
The darkness around me
Shores of solar sea
Oh how i wish to go down with the sun....
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.