dwatch/source/app.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(" - Удаление файла/директории");
}
}
}