[Cascavel-pm] uso de flock

Luis Campos de Carvalho lechamps em terra.com.br
Terça Julho 8 08:55:34 CDT 2003


Alceu Rodrigues de Freitas Junior wrote:
> On Fri, 04 Jul 2003 17:34:47 -0300
> Luis Campos de Carvalho <lechamps em terra.com.br> wrote:
> 
>>   Pode parecer bobagem, mas você precisa executar o flock() antes de 
>>abrir o arquivo...
> 
> Antes? Os exemplos que eu vi dizem para abrir o um descritor
 > de arquivos e depois usar flock nele... pelo menos faz sentido...

   Oops. Escrevi bobagem. Os exemplos (e você) têm razão: a gente usa o 
flock em um file descriptor aberto. =-] Desculpe...

>>   Não existe garantia de honrar o bloqueio por parte do S.O.
>>   Os processos que forem sobreescrever o artigo e não usarem flock() 
>>podem conseguir.
> 
> 
> Ahn, que beleza. :-| Simplesmente não vou poder fazer isso.
>  
> 
>>>system(echo 'teste' > arquivo);
>>
>>   o "echo" e o $SHELL não respeitam flock().
>>   Cuidado.
> 
> 
> Acho que vou fazer o CGI criar um arquivo de lock, e usar flock nele. Assim ele roda o processo apenas se esse arquivo estiver liberado para leitura.Se estiver, ele roda o comando. Se não estiver, ele espera por algum tempo, até conseguir acesso ao arquivo de lock ou estourar o tempo de timeout, o que ocorrer primeiro.
> 
> Faz sentido usar tal estratégia?

   A melhor estratégia de uso do flock() sempre envolve você ter algumas 
garantias externas. Acho que a melhor delas é garantir que não existem 
outros processos que podem acessar o arquivo flock'ed enquanto você está 
  rodando seu sistema de produção...

   Assim, o lock sempre será respeitado, pois todos os processos que se 
interessam pelo arquivo usam e respeitam o flock().

   Outra boa estratégia pode ser executar flock() em um arquivo vazio, 
que serve como referência para saber quem usa os arquivos de dados 
agora, e tentar fazer as transações no arquivo de dados atômicas, usando 
unlink e /bin/mv para sobrescrever o arquivo.

   Flávio, você saberia indicar um módulo Perl para ajudar?

   []'z!
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
   Luis Campos de Carvalho
   Computer Scientist,
   Unix Sys Admin & Certified Oracle DBA
   http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




Mais detalhes sobre a lista de discussão Cascavel-pm