ladybird/Userland/mon.cpp
Andreas Kling c8e2bb5605 Kernel: Add a mechanism for listening for changes to an inode.
The syscall is quite simple:

    int watch_file(const char* path, int path_length);

It returns a file descriptor referring to a "InodeWatcher" object in the
kernel. It becomes readable whenever something changes about the inode.

Currently this is implemented by hooking the "metadata dirty bit" in
Inode which isn't perfect, but it's a start. :^)
2019-07-22 20:01:11 +02:00

30 lines
673 B
C++

#include <AK/LogStream.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char** argv)
{
const char* path = argc > 1 ? argv[1] : ".";
int watch_fd = watch_file(path, strlen(path));
if (watch_fd < 0) {
perror("Unable to watch");
return 1;
}
for (;;) {
char buffer[256];
int rc = read(watch_fd, buffer, sizeof(buffer));
if (rc < 0) {
perror("read");
return 1;
}
if (rc == 0) {
printf("End-of-file.\n");
return 0;
}
printf("Something changed about '%s'\n", path);
}
return 0;
}