The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"cgi - доступ к файлам"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"cgi - доступ к файлам" 
Сообщение от hax emailИскать по авторуВ закладки(ok) on 20-Янв-05, 15:10  (MSK)
Есть задача сделать счетчик посещений страницы на 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" авторы этот вопрос как-то обходят стороной, и на письма не отвечают :)

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "cgi - доступ к файлам" 
Сообщение от chip emailИскать по авторуВ закладки(ok) on 21-Янв-05, 15:14  (MSK)
>Есть задача сделать счетчик посещений страницы на 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) нужен простейший путь - хранение в
>файле.


man 2 flock

Как это в Хуликсе делается БМП

> Во всех статьях о "пишем счетчик на kylix" авторы этот
>вопрос как-то обходят стороной, и на письма не отвечают :)

может потому что никто не пишет счетчики на Кайликсе?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "cgi - доступ к файлам" 
Сообщение от ACCA Искать по авторуВ закладки(ok) on 22-Янв-05, 03:00  (MSK)
>В один прекрасный момент counter.txt становится размером 0 байт. Как я понимаю,
>это происходит из-а того, что несколько экземпляров CGI одновременно пытаются получить
>доступ к файлу. Как можно решить эту проблему ? Нужно что-то
>типа mutex из Windows для разделения доступа к ресурсам. Я понимаю,

Есть два решения - сложное и простое.

Сложное:

Переименуй файл в counter.$$, где $$ - уникальное число, например твой PID. Если переименование обломалось, засни на несколько мсек и пробуй ещё.

Открой counter.$$, прочти, запиши, закрой. Переименуй в counter.txt.


Простое:

Не пиши CGI на Kylix.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру