56 lines
1.4 KiB
D
56 lines
1.4 KiB
D
import dfanotify;
|
|
|
|
import std.stdio;
|
|
import std.file : readLink;
|
|
import std.format : format;
|
|
import core.sys.posix.fcntl : AT_FDCWD;
|
|
import core.sys.posix.unistd : close;
|
|
import core.stdc.stdlib : exit;
|
|
|
|
void main()
|
|
{
|
|
Fanotify fan;
|
|
try {
|
|
fan = new Fanotify(
|
|
FAN_CLASS_NOTIF | FAN_CLOEXEC | FAN_REPORT_FID | FAN_REPORT_DIR_FID | FAN_REPORT_NAME);
|
|
} catch (Exception e) {
|
|
writeln(e.msg);
|
|
exit(1);
|
|
}
|
|
|
|
auto eventMask = FAN_OPEN | FAN_MODIFY | FAN_CLOSE | FAN_CREATE | FAN_DELETE | FAN_EVENT_ON_CHILD;
|
|
|
|
try {
|
|
fan.mark(FAN_MARK_ADD | FAN_MARK_ONLYDIR, eventMask, AT_FDCWD, "/tmp/scripts");
|
|
} catch (Exception e) {
|
|
writeln(e.msg);
|
|
exit(1);
|
|
}
|
|
|
|
writeln("Мониторинг запущен для /tmp/scripts...");
|
|
|
|
while (true)
|
|
{
|
|
auto events = fan.readEvents();
|
|
|
|
foreach (ref e; events)
|
|
{
|
|
string path = e.name.length ? e.name : "unknown";
|
|
|
|
writefln("Событие: mask=0x%x, pid=%d, name/path=%s", e.mask, e.pid, path);
|
|
|
|
if (e.isOpen)
|
|
writeln(" - Открытие файла");
|
|
if (e.isModify)
|
|
writeln(" - Модификация файла");
|
|
if (e.isCloseWrite)
|
|
writeln(" - Закрытие после записи");
|
|
if (e.isCloseNoWrite)
|
|
writeln(" - Закрытие без записи");
|
|
if (e.isCreate)
|
|
writeln(" - Создание файла/директории");
|
|
if (e.isDelete)
|
|
writeln(" - Удаление файла/директории");
|
|
}
|
|
}
|
|
}
|