fswatch é um monitor de alteração de arquivos que recebe notificações quando o conteúdo dos arquivos ou diretórios especificados é modificado. fswatch implementa vários monitores:
stat (2) possa ser usado). fswatch deve ser compilado e funcionar corretamente em qualquer sistema que envie qualquer uma das APIs mencionadas acima.
fswatch é uma interface de libfswatch , uma biblioteca com ligação C e C++. Mais informações sobre libfswatch podem ser encontradas aqui.
Os principais recursos fswatch são:
As limitações do fswatch dependem em grande parte do monitor usado:
O monitor FSEvents , disponível apenas no macOS, não tem limitações conhecidas e se adapta muito bem ao número de arquivos observados.
O monitor File Events Notification , disponível nos kernels Solaris e seus derivados, não tem limitações conhecidas.
O monitor kqueue , disponível em qualquer sistema *BSD com kqueue, requer que um descritor de arquivo seja aberto para cada arquivo sendo monitorado. Como resultado, esse monitor não se adapta bem ao número de arquivos observados e pode começar a se comportar mal assim que o processo fswatch ficar sem descritores de arquivo. Nesse caso, fswatch despeja um erro no erro padrão para cada arquivo que não pode ser aberto.
O monitor inotify , disponível no Linux desde o kernel 2.6.13, pode sofrer um estouro de fila se os eventos forem gerados mais rápido do que são lidos na fila. Em qualquer caso, é garantido que o aplicativo receba uma notificação de estouro que pode ser tratada para uma recuperação normal. Atualmente, fswatch lança uma exceção se ocorrer um estouro de fila. Versões futuras lidarão com o excesso emitindo notificações adequadas.
O monitor do Windows só pode estabelecer diretórios de observação, não arquivos. Para monitorar um arquivo, seu diretório pai deve ser monitorado para receber eventos de mudança para todos os filhos do diretório, recursivamente em qualquer profundidade. Opcionalmente, os eventos de alteração podem ser filtrados para incluir apenas alterações no arquivo desejado.
O poll monitor, disponível em qualquer plataforma, depende apenas da CPU e memória disponíveis para realizar sua tarefa. O desempenho deste monitor diminui linearmente com o número de arquivos monitorados.
As recomendações de uso são as seguintes:
No macOS, use apenas o monitor FSEvents (que é o comportamento padrão).
No Solaris e seus derivados, use o monitor Notificação de eventos de arquivo .
No Linux, use o monitor inotify (que é o comportamento padrão).
Se o número de arquivos a serem observados for suficientemente pequeno, use o monitor kqueue . Tenha em atenção que em alguns sistemas o número máximo de descritores de ficheiros que podem ser abertos por um processo está definido para um valor muito baixo (valores tão baixos como 256 não são invulgares), mesmo que o sistema operativo permita um valor muito maior. Nesse caso, verifique a documentação do sistema operacional para aumentar esse limite por processo ou em todo o sistema.
Se possível, observe os diretórios em vez dos arquivos. A elaboração adequada do lado receptor dos eventos para lidar com diretórios pode reduzir sensivelmente o consumo de recursos do monitor.
No Windows, use o monitor windows .
Se nenhuma das opções acima se aplicar, use o monitor de votação. A experiência dos autores indica que fswatch requer aproximadamente 150 MB de memória RAM para observar uma hierarquia de 500.000 arquivos com um comprimento mínimo de caminho de 32 caracteres. Um gargalo comum do monitor de pesquisa é o acesso ao disco, já que stat() executar um grande número de arquivos pode levar muito tempo. Neste caso, a latência deve ser definida para um valor suficientemente grande para reduzir a degradação do desempenho que pode resultar do acesso frequente ao disco.
Um usuário comum pode conseguir obter fswatch do gerenciador de pacotes do seu sistema operacional ou de terceiros. Se você estiver procurando pelo fswatch para macOS, poderá instalá-lo usando MacPorts ou Homebrew:
# MacPorts
$ port install fswatch
# Homebrew
$ brew install fswatch
No FreeBSD, fswatch pode ser instalado usando pkg:
# pkg install fswatch-mon Verifique seu gerenciador de pacotes favorito e informe-nos se fswatch estiver faltando nele.
Um usuário que deseja construir fswatch deve obter um tarball de lançamento. Um tarball de lançamento contém tudo que um usuário precisa para construir fswatch em seu sistema, seguindo as instruções detalhadas na seção Instalação abaixo e no arquivo INSTALL .
Um desenvolvedor que deseja modificar fswatch deve obter os fontes (seja de um tarball de origem ou clonando o repositório) e ter o GNU Build System instalado em sua máquina. Por favor, leia README.gnu-build-system para obter mais detalhes sobre como inicializar fswatch a partir de fontes em sua máquina.
Obter uma cópia do repositório de origem não é recomendado, a menos que você seja um desenvolvedor, tenha o GNU Build System instalado em sua máquina e saiba como inicializá-lo nos fontes.
Consulte o arquivo INSTALL para obter informações detalhadas sobre como configurar e instalar fswatch . Como o fswatch cria e usa bibliotecas dinâmicas, em algumas plataformas pode ser necessário realizar tarefas adicionais antes de poder usar fswatch :
Certifique-se de que o diretório de instalação das bibliotecas dinâmicas ( $PREFIX/lib ) esteja incluído nos caminhos de pesquisa do vinculador dinâmico do seu sistema operacional. O caminho padrão, /usr/local/lib , funcionará em quase todos os sistemas operacionais.
Pode ser necessário atualizar os links e o cache das bibliotecas dinâmicas. Em sistemas GNU/Linux você pode precisar executar ldconfig :
$ ldconfig
fswatch é um programa C++ e é necessário um compilador C++ compatível com o padrão C++ 11 para compilá-lo. Verifique a documentação do sistema operacional para obter informações sobre como instalar a cadeia de ferramentas C++ e o tempo de execução C++.
Nenhum outro pacote de software ou dependência é necessário para configurar e instalar fswatch exceto as APIs mencionadas acima usadas pelos monitores do sistema de arquivos.
fswatch fornece a seguinte documentação:
A documentação oficial fswatch é fornecida no formato Texinfo. Esta é a fonte de informações mais abrangente sobre fswatch e a única confiável. A página man, em particular, é um esboço que sugere ao usuário usar a página de informações.
Se você estiver instalando fswatch usando um gerenciador de pacotes e quiser que o manual em PDF seja incluído no pacote, envie uma solicitação de recurso ao mantenedor do pacote.
fswatch é localizável e usa GNU gettext internamente para desacoplar string localizável de sua tradução. As localidades atualmente disponíveis são:
en ).it ).es ). Para construir fswatch com suporte de localização, você precisa ter gettext instalado em seu sistema. Se configure não puder encontrar <libintl.h> ou o vinculador não puder encontrar libintl , talvez seja necessário fornecer manualmente sua localização para configure , geralmente usando as variáveis CPPFLAGS e LDFLAGS . Veja README.macos para ver um exemplo.
Se gettext não estiver disponível em seu sistema, fswatch será compilado corretamente, mas não terá suporte para localização e o único idioma disponível será o inglês.
fswatch aceita uma lista de caminhos para os quais os eventos de mudança devem ser recebidos:
$ fswatch [options] ... path-0 ... path-n
O fluxo de eventos é criado mesmo que algum dos caminhos ainda não exista. Se eles forem criados após o lançamento fswatch , os eventos de alteração serão recebidos corretamente. Dependendo do inspetor usado, os caminhos recém-criados serão monitorados depois que a quantidade de latência configurada tiver decorrido.
A saída do fswatch pode ser canalizada para outro programa para processá-la posteriormente:
$ fswatch -0 path | while read -d "" event
do
// do something with ${event}
done
Para executar um comando quando um conjunto de eventos de alteração é impresso na saída padrão, mas nenhum detalhe do evento é necessário, o seguinte comando pode ser usado:
$ fswatch -o path | xargs -n1 -I{} program
O comportamento é consistente com versões anteriores do fswatch (v. 0.x). Por favor, leia a seção Problemas de compatibilidade com fswatch v. 0.x para obter mais informações.
Por padrão, fswatch escolhe o melhor monitor disponível na plataforma atual, em termos de desempenho e consumo de recursos. Se o usuário desejar especificar um monitor diferente, a opção -m poderá ser usada para especificar o monitor por nome:
$ fswatch -m kqueue_monitor path
A lista de monitores disponíveis pode ser obtida com a opção -h .
Para obter mais informações, consulte a documentação fswatch .
Todos são bem-vindos para contribuir com fswatch . Por favor, consulte CONTRIBUTING para obter mais informações.
Relatórios de bugs podem ser enviados diretamente aos autores.
O autor pode ser contatado no IRC, usando o canal Freenode #fswatch .
Este software possui licença dupla sob a GPL v. 3.0 e a Licença Apache v.
Copyright (c) 2013-2021 Enrico M. Crisóstomo
Este programa é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU conforme publicada pela Free Software Foundation; versão 3 ou (opcional) qualquer versão posterior.
Este programa é distribuído na esperança de que seja útil, mas SEM QUALQUER GARANTIA; mesmo sem a garantia implícita de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM. Veja a Licença Pública Geral GNU para mais detalhes.
Você deverá ter recebido uma cópia da Licença Pública Geral GNU junto com este programa. Caso contrário, consulte http://www.gnu.org/licenses/.