@SEPTAG
DMON es una pequeña biblioteca C que monitorea los cambios en un directorio. Proporciona una solución unificada a múltiples API del sistema que existen para cada sistema operativo. También puede monitorear directorios recursivamente.
ReadDirectoryChangesW Backend. Probado con Windows10 SDK + Visual Studio 2019inotify backend. Probado con GCC-7.4/Clang-6, Ubuntu 18.04 LTSFSEvents Backend. Probado con macOS-10.14 Clang 10Solo tiene que incluir el archivo y usar sus funciones. También es compatible con el código C ++. Las barras de retroceso en las rutas de Windows también se convierten en '/' para la portabilidad.
#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 obtener más información y cómo personalizar la funcionalidad, consulte DMON.H
Para construir en Linux, enlace con pthread : gcc test.c -lpthread -o test
Para construir sobre macOS, enlace con CoreServices y CoreFoundation : clang test.c -framework CoreFoundation -framework CoreServices -lpthread -o test
Existe este otro archivo dmon_extra.h que puede incluir opcionalmente después de dmon.h para el backend de Linux. Hay dos API que se introducen en ese encabezado, dmon_watch_add y dmon_watch_rm en el que puede agregar/eliminar subdirectorios al directorio actualmente observado. Esto puede ser útil en los casos en que hay un gran conjunto de cambios en el backend de Linux y no obtendrá todos los eventos, debido a algunos inconvenientes del backend inotify . Entonces, al deshabilitar DMON_WATCHFLAGS_RECURSIVE y usar estas funciones para manejar manualmente la recursión del directorio, puede solucionar esos 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.