@septag
DMON - это крошечная библиотека C, которая контролирует изменения в каталоге. Он обеспечивает единое решение для нескольких системных API, которые существуют для каждой ОС. Это также может контролировать каталоги рекурсивно.
ReadDirectoryChangesW Backend. Протестировано с помощью Windows10 SDK + Visual Studio 2019inotify бэкэнд. Протестировано с GCC-7.4/Clang-6, Ubuntu 18.04 LTSFSEvents Backend. Протестировано с MacOS-10.14 Clang 10Вы просто должны включить файл и использовать его функции. Он также совместим с кодом C ++. Backslash в пути Windows также преобразуются в «/» для переносимости.
#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 ;
}Для получения дополнительной информации и как настроить функциональность, см. DMON.H
Чтобы построить Linux, ссылка с pthread : gcc test.c -lpthread -o test
Чтобы опираться на macOS, ссылка с CoreServices и CoreFoundation : clang test.c -framework CoreFoundation -framework CoreServices -lpthread -o test
Есть другой файл dmon_extra.h , который вы можете включить необязательно после dmon.h для бэкэнд Linux. Есть два API, которые вводятся в этом заголовке, dmon_watch_add и dmon_watch_rm в которые вы можете добавить/удалить подзадачи в каталог в настоящее время. Это может быть полезно в тех случаях, когда в бэкэнд Linux происходит большой набор изменений, и вы не получите все события из -за некоторых недостатков бэкэнда inotify . Таким образом, отключив DMON_WATCHFLAGS_RECURSIVE и используя эти функции для вручную обрабатывать рекурсию каталогов, вы можете облегчить эти проблемы.
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.