Есть задача сделать счетчик посещений страницы на Kylix.
Значение счетчика хранится в текстовом файле. Собственно процедура инкрементации счетчика выглядит так:
//в файле хранятся несколько счетчиков, index - номер счетчика
procedure TWebModule1.IncreaseQueryCount(index: integer);
var
s: TStringList;
i,j: integer;
begin
s:=TStringList.Create();
try
s.LoadFromFile('counter.txt');
if s.count>=2 then
begin
val(s[index],i,j);
inc(i);
s[index]:=inttostr(i);
s.SaveToFile('counter.txt');
end;
finally
end;
s.destroy;
end;
В один прекрасный момент counter.txt становится размером 0 байт. Как я понимаю, это происходит из-а того, что несколько экземпляров CGI одновременно пытаются получить доступ к файлу. Как можно решить эту проблему ? Нужно что-то типа mutex из Windows для разделения доступа к ресурсам. Я понимаю, что можно использовать записи в базе данных с возможностью блокировки, но в моем случае (настроить базу данных я точно не смогу, так как очень мало знаю Linux) нужен простейший путь - хранение в файле. Во всех статьях о "пишем счетчик на kylix" авторы этот вопрос как-то обходят стороной, и на письма не отвечают :)