@septag
DMON adalah perpustakaan C kecil yang memantau perubahan dalam direktori. Ini memberikan solusi terpadu untuk beberapa API sistem yang ada untuk setiap OS. Ini juga dapat memantau direktori secara rekursif.
ReadDirectoryChangesW Backend. Diuji dengan Windows10 SDK + Visual Studio 2019inotify . Diuji dengan GCC-7.4/Clang-6, Ubuntu 18.04 LTSFSEvents . Diuji dengan MacOS-10.14 Dentang 10Anda hanya perlu memasukkan file dan menggunakan fungsinya. Ini juga kompatibel dengan kode C ++. Backslash di jalur windows juga dikonversi menjadi '/' untuk portabilitas.
#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 ;
}Untuk informasi lebih lanjut dan cara menyesuaikan fungsionalitas, lihat DMON.H
Untuk membangun di Linux, tautkan dengan pthread : gcc test.c -lpthread -o test
Untuk membangun macOS, tautkan dengan CoreServices dan CoreFoundation : clang test.c -framework CoreFoundation -framework CoreServices -lpthread -o test
Ada file lain dmon_extra.h yang dapat Anda sertakan secara opsional setelah dmon.h untuk backend linux. Ada dua API yang diperkenalkan di header itu, dmon_watch_add dan dmon_watch_rm di mana Anda dapat menambahkan/menghapus sub-direktori ke direktori yang saat ini ditonton. Ini dapat berguna dalam kasus di mana ada serangkaian perubahan besar yang terjadi di linux backend dan Anda tidak akan mendapatkan semua acara, karena beberapa kelemahan dari backend inotify . Jadi, dengan menonaktifkan DMON_WATCHFLAGS_RECURSIVE dan menggunakan fungsi -fungsi ini untuk secara manual menangani rekursi direktori, Anda dapat menjelaskan masalah -masalah tersebut.
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.