Задача, старая как мир :
1) Есть общий каталог
2) Первый процесс собирает данные и пишет их в файл в этом каталоге.
3) Второй процесс - читает записанные файлы, обрабатывает их и уничтожает.
Пытаюсь сделать так : второй процесс мониторит общий каталог с помощью dnotify. Ловится событие создания файла. Получив сигнала о создании файла, второй процесс открывает его, обрабатывает и удаляет. Проблема в том, что сигнал ОС посылает в момент СОЗДАНИЯ файла первым процессом. И когда второй процесс пытается его читать. там еще ничего НЕТ !!! Надо каким-то образом дождаться, когда второй процесс завершит создание файла и ЗАКРОЕТ его. Попытка открывать файл на чтение с атрибутом O_EXCL во втором процессе ничего не дает. Первый процесс от меня не зависит никак - я им не управляю. Открывать файл во втором процессе монопольно на запись (если будет ошибка - значит файл захвачен кем-то другим) не хочется по причине сложности получаемого алгоритма действий....
Есть какие-то более простые решения ? Как узнать, что файл открыт на ЗАПИСЬ другим процессом ?
Как узнать - пишет ли другой процесс в файл ? (Первый процесс пишет данные в файлы, второй - читает.)
Модератор: Модераторы разделов
-
oxd
- Сообщения: 165
Re: Как узнать - пишет ли другой процесс в файл ?
Дык заблокируйте файл. Смотрите в сторону семафоров и мутексов.
Товарищ стой! Сожми покрепче маузер!
Не дай предателю мимо пройти!
Он променял консоль на браузер.
Таким не место в сфере IT!
Не дай предателю мимо пройти!
Он променял консоль на браузер.
Таким не место в сфере IT!
-
svary
- Сообщения: 49
- ОС: Linux FC-9
Re: Как узнать - пишет ли другой процесс в файл ?
Для этого надо ставить и убирать локировки (не важно - семафорами, мьютексами - чем угодно...) в ОБОИХ процессах.
А я делаю только один. И повлиять на поведение процесса-поставщика нет НИКАКОЙ возможности.
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Как узнать - пишет ли другой процесс в файл ?
Используйте inotify (событие IN_CLOSE_WRITE).
-
rm_
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: Как узнать - пишет ли другой процесс в файл ?
Надо каким-то образом дождаться, когда второй процесс завершит создание файла
Простейший вариант:
- закончив запись в файл filename.txt и закрыв его, процесс делает touch filename.txt.ready.
-
svary
- Сообщения: 49
- ОС: Linux FC-9
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
-
svary
- Сообщения: 49
- ОС: Linux FC-9
Re: Как узнать - пишет ли другой процесс в файл ?
К сожалению, у меня нет ни малейшей возможности повлиять на поведение процесса, пишущего данные в файл. Это встроенная система, операционку для которой и базовый набор ПО ставим не мы. Приходится подлаживаться под существующие реальности...
-
svary
- Сообщения: 49
- ОС: Linux FC-9
-
Rootlexx
- Бывший модератор
- Сообщения: 4471
- Статус: GNU generation
- ОС: Debian GNU/Linux
Re: Как узнать - пишет ли другой процесс в файл ?
Если первый процесс пишет в файл постоянно и непрерывно, то можно отслеживать время модификации этого файла раз в некоторый промежуток времени. Как только оно перестаёт изменяться, значит, файл скорее всего был закрыт.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Как узнать - пишет ли другой процесс в файл ?
на сколько я понял, никаких блокировок тут нет - просто создаётся жёсткая ссылка. потому от того что процесс №2 уничтожил файл, файл не уничтожается, он уничтожится только после закрытия файла процессом №1, и после его(файла) уничтожения каким-то процессом №3. это возможно сложнее понять, за то чётко и просто работает - если данные кем-то уничтожаются, это не мешает жить другим...
ага... вот через это и надо.