Есть 2 проги. Одна пишет в файл, другая читает. У меня нет доступа к проге, ктр. пишет в файл.
Ну как минимум она открывает его в режиме записи . Моя программа читает из этого файла.
Я не знаю когда начинается и когда заканчивается процесс записи. Факт в том что моя прога иногда заваливается —
ну скорее всего это происходит когда первая прога очищает файл и начинает запись — в результате некорректные
положения указателя в моей проге, либо что то другое. Подскажите как решить данную проблему.
Каким образом синхронизировать 2 процесса. Может реализовать монопольный доступ ? И каким образом ?
Желательно решение на ANSI C.
Здравствуйте, sysenter, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Может реализовать монопольный доступ ? И каким образом ? А>>Желательно решение на ANSI C.
S>Платформозависимое API, только так, Win — LockFile, LockFileEx; Linux — fcntl, flock.
On 06.09.2011 19:03, Аноним 496 wrote:
> Каким образом синхронизировать 2 процесса. Может реализовать монопольный доступ > ? И каким образом ? > Желательно решение на ANSI C.
Тебе надо не блокировать файл (просто завалиш ту другую прогу), а правильно
обрабатывать ошибки при чтении и правильно это чтение делать.
А именно -- каждую операцию чтения делать "с нуля", не надеясь, что
предыдущая где-то закончилась и оставила указатель файла.
Если правильно делать все операции ввода на С, то программа не должна
падать, максимум -- она должна что-то не читать.
Здравствуйте, MasterZiv, Вы писали:
MZ>Тебе надо не блокировать файл (просто завалиш ту другую прогу),
Если файл блокирован и прога его открывает не в режиме O_NONBLOCK то прога просто будет ждать момента снятия блокировки с файла, если файл открывается в режиме O_NONBLOCK то сама прога тут уже должна обрабатывать ошибку открытия EAGAIN.
С чего вдруг прога должна завалиться?
MZ>Тебе надо не блокировать файл (просто завалиш ту другую прогу), а правильно MZ>обрабатывать ошибки при чтении и правильно это чтение делать.
Этого я и пытался добиться — обработать ошибки и не читать. Не получается. Если файл существует, не поврежден,
есть доступ к диску — он открывается в любом случае без ошибок. Максимум, что я могу получить это нулевые указатели
на таких функциях как fgets() — но в этом случае я не знаю — то ли достигнут конец файла, то ли первая прога почистила данные
— по ferror(f) не получаю ошибок. Поэтому и считаю, что лучше блокировать файл.