[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