@Septag
O DMON é uma pequena biblioteca C que monitora as mudanças em um diretório. Ele fornece uma solução unificada para várias APIs do sistema que existem para cada sistema operacional. Também pode monitorar os diretórios recursivamente.
ReadDirectoryChangesW Backend. Testado com Windows10 SDK + Visual Studio 2019inotify Backend. Testado com GCC-7.4/Clang-6, Ubuntu 18.04 LTSFSEvents . Testado com MacOS-10.14 Clang 10Você só precisa incluir o arquivo e usar suas funções. Também é compatível com o código C ++. As barris nos caminhos do Windows também são convertidas em '/' para portabilidade.
#define DMON_IMPL
#include "dmon.h"
static void watch_callback ( dmon_watch_id watch_id , dmon_action action , const char * rootdir ,
const char * filepath , const char * oldfilepath , void * user )
{
// receive change events. type of event is stored in 'action' variable
}
int main ()
{
dmon_init ();
dmon_watch ( "/path/to/directory" , watch_callback , DMON_WATCHFLAGS_RECURSIVE , NULL );
// wait ...
dmon_deinit ();
return 0 ;
}Para obter mais informações e como personalizar a funcionalidade, consulte DMon.H
Para construir no Linux, vincule -se ao pthread : gcc test.c -lpthread -o test
Para construir no MacOS, vincule -se a CoreServices e CoreFoundation : clang test.c -framework CoreFoundation -framework CoreServices -lpthread -o test
Existe esse outro arquivo dmon_extra.h que você pode incluir opcionalmente após dmon.h para o back -end do Linux. Existem duas APIs que são introduzidas nesse cabeçalho, dmon_watch_add e dmon_watch_rm , no qual você pode adicionar/remover subdiretos ao diretório atualmente assistido. Isso pode ser útil nos casos em que há um grande conjunto de mudanças no back -end do Linux e você não obterá todos os eventos, devido a algumas desvantagens do back -end inotify . Portanto, ao desativar DMON_WATCHFLAGS_RECURSIVE e usando essas funções para manipular manualmente a recursão de diretório, você pode alternar esses problemas.
Copyright 2019 Sepehr Taghdisian. All rights reserved.
https://github.com/septag/dmon
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.