Russian Qt Forum

Qt => Общие вопросы => Тема начата: merke от Апрель 03, 2012, 16:42



Название: Одновременная запись в файл
Отправлено: merke от Апрель 03, 2012, 16:42
Всем привет!

Есть консольное приложение, которое запускает php скрипт, в параметрах передает некие идентификаторы, приложение должно открыть файл на чтение сначала, считать от туда реестр, если там не находится полученный идентификатор добавляет его и вписывает его значение единичку, если находит то инкриментирует значение и заново всё это сохраняет на диск. Так вот может получится ситуация, что моё приложение будет запущенно дважды или более в один момент времени, будут траблы как понимаете. Как быть с этим? Подскажите, пожалуйста!


Название: Re: Одновременная запись в файл
Отправлено: V1KT0P от Апрель 03, 2012, 16:49
Всем привет!

Есть консольное приложение, которое запускает php скрипт, в параметрах передает некие идентификаторы, приложение должно открыть файл на чтение сначала, считать от туда реестр, если там не находится полученный идентификатор добавляет его и вписывает его значение единичку, если находит то инкриментирует значение и заново всё это сохраняет на диск. Так вот может получится ситуация, что моё приложение будет запущенно дважды или более в один момент времени, будут траблы как понимаете. Как быть с этим? Подскажите, пожалуйста!
1) Запретить одновременный запуск программы.
2) Открыть файл с параметрами запрещающими другим тоже его открывать.


Название: Re: Одновременная запись в файл
Отправлено: merke от Апрель 03, 2012, 16:50
спасибо, но не вариант


Название: Re: Одновременная запись в файл
Отправлено: V1KT0P от Апрель 03, 2012, 16:55
спасибо, но не вариант
3) Ставить глобальный мьютекс с именем идентификатора на время его использования.
4) Определять что запущена твоя же программа и через сокеты координировать действия.


Название: Re: Одновременная запись в файл
Отправлено: merke от Апрель 03, 2012, 16:56
Во, это уже интереснее, ни разу не юзал такое, можно малюсенький пример, если у вас есть время


Название: Re: Одновременная запись в файл
Отправлено: V1KT0P от Апрель 03, 2012, 16:59
Во, это уже интереснее, ни разу не юзал такое, можно малюсенький пример, если у вас есть время
Тебе про что про глобальные мьютексы или про сокеты? =).
На винде использовал как-то WinApi функцию CreateMutex, которая принимает в качестве параметра строку.


Название: Re: Одновременная запись в файл
Отправлено: merke от Апрель 03, 2012, 17:00
В данном проекте категорически не использую сокеты, операционная система Debian


Название: Re: Одновременная запись в файл
Отправлено: merke от Апрель 03, 2012, 17:02
Думаю может QSharedMemory использовать, но блин должно быть что то очень надежное и более простое


Название: Re: Одновременная запись в файл
Отправлено: ecspertiza от Апрель 03, 2012, 17:16
Можешь еще глянуть в сторону

Код:
QLocalServer
QLocalSocket

классов, создает локальный сервер по имени, не вдавался как работает. Так же по имени проверяешь коннект, если коннект есть значит прога запущена. Можно и передать ей что то по необходимости.


Название: Re: Одновременная запись в файл
Отправлено: V1KT0P от Апрель 03, 2012, 17:20
В данном проекте категорически не использую сокеты, операционная система Debian
В Линуксе есть semget.

Еще можешь тупо во временной папке создавать пустые файлы, которые будут играть роль мьютексов =).