O inotify pode ser usado para procurar por um arquivo específico a ser criado sem monitorar o diretório inteiro?

6

Eu quero ser notificado quando um nome de arquivo específico for criado. Eu estou olhando para inotify . O IN_CREATE flag está disponível para monitorar um diretório para quaisquer alterações dentro dele, mas prefiro não monitorar todo o diretório, pois pode haver uma boa quantidade de atividades nesse diretório além do arquivo em que estou interessado. isso ser feito?

    
por BobDoolittle 05.09.2014 / 19:02

1 resposta

5

Você não pode ter o kernel apenas informando sobre uma mudança em um determinado caminho. As razões são um pouco sutis:

  • No Linux, um objeto de arquivo existe independentemente de qualquer nome que ele possa ter. Os nomes dos arquivos são, na verdade, atributos de seus diretórios contidos, e um único arquivo pode ser chamado por vários nomes (veja, hardlinking).

  • O kernel precisa ter algo para anexar objetos de inotificação; ele não pode anexar um objeto a um nome de caminho desde que um nome de caminho não seja um objeto de sistema de arquivos real; você precisa se conectar ao diretório pai ou ao arquivo que o caminho descreve. Mas você não pode anexar ao arquivo, porque você está assistindo para ver se um arquivo com um determinado nome é criado, não muda para um determinado arquivo.

Teoricamente, o kernel pode implementar uma API que permite selecionar eventos para um determinado nome de caminho ao adicionar um relógio a um diretório, da mesma forma que permite selecionar tipos de eventos. Isso iria inchar a API, e o kernel, no final, estaria processando os mesmos dados e fazendo a mesma comparação de strings que você estaria fazendo no espaço do usuário.

Existe um desempenho notável para colocar um relógio em um diretório muito ativo? Não tenho certeza de quão ativo você é; dezenas de arquivos por segundo, centenas, milhões?

De qualquer forma, eu evitaria access : sempre será uma corrida. Um arquivo poderia ser criado e removido entre as chamadas para access , e chamar access em um loop muito apertado seria lento, e é o tipo de problema que o inotify foi projetado para resolver.

    
por 26.09.2016 / 10:38

Tags