Страница 1 из 1
Блокировка текстовых файлов
Добавлено: 15 янв 2005, 12:12
Пацак с планеты Земля
Столкнулся с такой проблемой. Есть cgi программка, написанная на Delphi, которая вызывается со странички на сайте. Программа эта должна вести log файл, но т.к. страничку могут одновременно открыть сразу n пользователей, то в один и тот же файл (TextFile) все сразу записать не смогут - он будет заблокирован тем, кто первый запустил программу.
Собственно вопрос: Есть ли способ доступа к файлу, чтобы программа дождалась пока он будет свободен для записи и только после этого писала в него данные.
Спасибо.
Добавлено: 18 янв 2005, 00:05
Naeel Maqsudov
Для этих целей можно использовать семафоры или мьютексы.
(см раздел Synchronization Functions в справке WinAPI).
Если кому-то надо записать что-то в файл, то пусть он создает семафор, если семафор создать не удается, то это коллизия. Надо выждать случайную паузу и попробовать еще раз. Если семафор создать удалось, то надо произвести запись и разрушить семафор.
Могу также предложить более производительное решение. Создать еще одно приложение - Лог-сервер. Пусть к нему можно обращаться через shared files, named pipes... или на худой конец по tcpip. Все экземпляры CGI-шек уже не ждут своей очереди, а пишут в пайп или сокет (если конечно логсервер есть в наличии). Если он есть, то он это поймает, и положит в буфер, а при заполнении буфера пусть скидывает на диск кусками. Ну как?
Добавлено: 18 янв 2005, 12:09
Пацак с планеты Земля
Идеи хорошие! Спасибо! Буду пробовать.