![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| szz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
У меня две программы обзаются, но дурацким способом - через расшаренную папку.
Программа А пишет вэту папку текстовые файлы иногда, а программа Б проверяет, есть ли в этой папке файлы, и если есть - то читает их, в них комманды, которые она должна выполнить. Программа Б проверяет папку раз в 10 секунд, когда она выполняет все команды из конкретного файла - то удаляет этот файл. Проблема в том, что иногда Б начитает читать тот файл, который еще не дописан программой А! Читает, видит там пол команды написаны, и криво обрабатывает, потом еще и пытается удалить файл, который первая прога еще не дописала даже. Вот если бы Б могла видеть, не закончили ли еще писать файл с той стороны? Т.е. открыт ли где-нибудь дескриптор указывающий на этот файл? И если да, то не трогать файл, до следующей попытки. --------------------
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
szz, если не использование межпроцессное общение, то пусть программа А после окончания работы с файлом 1 создаёт вспомогательный пустой файл 1а. По нему программа Б и определит, что файл 1 готов к работе.
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
Есть флаги разделения доступа. В зависимости от OC (посмотри доки). Например, если Windows, это будут флаги FILE_SHARE_READ \ WRITE. Устанавливаются (или нет) при открытии файла. Если используется какая-то библиотека, то она может собственную интерпретацию давать. Например, MFC::CFile определяет флаги с противоположным значением: shareDenyRead и т.д. (не разрешающие, а запрещающие), но суть от этого не меняется.
-------------------- ... |
|||
|
||||
| SergeCpp |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 955 Регистрация: 8.8.2005 Где: At Home Репутация: 15 Всего: 124 |
Вот программа CRC32, работающая через общий файл
Прикрепил файл с программой для Multi-Edit, которая работает совместно с CRC32 (смотрите в конце файла) Пишите в общий файл некий флаг (первый символ, например), говорящий о том, что файл готов 1. Начинаете создавать файл, флаг = 0 2. Создаёте файл, флаг не меняется 3. Файл готов, записываете флаг = 1 Присоединённый файл ( Кол-во скачиваний: 4 )
MISC.RAR 11,70 Kb |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Можно еще создать именованый мютекс, с именем, производным от имени файла, при открытии файла, перед тем как записать что-то в файл - захватывать мютекс, а потом освобождать.
|
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
А можно еще проще. Программа Б ищет только файлы с определенным расширением и только их обрабатывает. Программа А создает файлы с другим расширением и пишет в них, как только файл полностью записан, он закрывается и его расширение меняется на правильное путем переименования. Имхо, это реализуется гораздо проще.
|
|||
|
||||
| szz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Всем спасибо ) нану наверное с самого простого решения - от bsa
--------------------
|
|||
|
||||
| nanoo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.10.2007 Репутация: нет Всего: нет |
а что, нельзя разве это через сокеты сделать? нафига 10 раз в секунду дергаться, если можна один сокет создать и будет он сидеть и ждать. как только данные пришли, он тут же их и обрабатывает.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |