Консультация № 72300
23.01.2007, 19:38
0.00 руб.
0 4 4
Подскажите плиз как решить такую задачу.
Имеется два компьютера в сети, на каждом из них
выполняется по одному процессу, которые используют общий
для этих двух процессов файл. Необходимо
синхронизировать использование этого файла
этими двумя процессами. Т.е. если один процесс
работает с этим файлом другой - ожидает пока
первый процесс закончит свою работу.
Как это реализовать? Хотя бы основные принципы!
Спасибо за ответы!

Обсуждение

Неизвестный
23.01.2007, 19:49
общий
это ответ
Здравствуйте, kool!

самое просто это использовать файлов-флагов.
например у вас файл называется share.dat.
первый процесс пытается создать файл share.dat.lock нулевого размера, если ему это удается, то он начинает работать с файлом, и когда заканчивает то стирает этот файл.
процесс два тоже пытается создать файл share.dat.lock, но допустим что этот файл уже создан. значит другой процесс сейчас работает над этим файлом. процесс переодически пытается создать лок файл, до тех пор пока ему это не удается. после окончании работы он в свою очередь стирает лок файл.
давно
Советник
419
1011
23.01.2007, 19:52
общий
это ответ
Здравствуйте, kool!

Используй атрибут доступа. Открывай файл с закрытием доступа, и с проверкой на доступ. Если доступ закрыт, то ждёт по циклу, пока доступ будет разрешён. Когда один комп завершит работу, закрывай файл, тогда второй комп откроет его и т.д.

Насчёт задержек - отдавай процессорное время и проверяй через каждые 500 мс, взгляни на прерывание int 21 и её функции 83h и др.

Удачи!
давно
Посетитель
7438
7205
24.01.2007, 11:23
общий
это ответ
Здравствуйте, kool!
Хочу предложить взглянуть на проблему по-другому.
Если один процесс является основным и является хозяином файла.
Тогда можно организовать систему по принципу клиент-сервер.
В таком случае основной процесс монопольно работает с файлом сам,
плюс выполняет запросы от клиентов.
Клиент-сервер можно организовать, например, при помощи пайпов или сокетов
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Старший Модератор
31795
6196
25.01.2007, 11:41
общий
это ответ
Здравствуйте, kool!
если Вы используете CreateFile: Вам нужно переменную dwShareMode обнулить
файл открывается блокированным для других процессов до закрытия файла
если файл уже открыт фунция дает ошибку.
если Вы используете OpenFile: Вам нужно переменной uStyle присвоить значение
OF_SHARE_EXCLUSIVE
Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа