Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <errno.h>
- #include <sys/types.h>
- #include <sys/inotify.h>
- #include <limits.h>
- #define MAX_EVENTS 1024 // MAX NUMBER OF PROCESS AT ONE ROUTINE
- #define LEN_NAME 32 // FILE NAME LENGTH LIMIT
- #define EVENT_SIZE (sizeof(struct inotify_event)) // SIZE OF ONE EVENT
- #define BUF_LEN (MAX_EVENTS*(EVENT_SIZE+LEN_NAME)) // BUFFER TO STORE THE DATA OF EVENTS
- int main(int argc, char **argv) {
- int length, i = 0, wd;
- int fd;
- char buffer[BUF_LEN];
- // INITIALIZE INOTIFY
- fd = inotify_init();
- if(fd < 0)
- perror("INOTIFY INITIALIZATION FAIL");
- // WATCH FOR STARTING DIRECTORY
- wd = inotify_add_watch(fd, argv[1], IN_CREATE | IN_MODIFY | IN_DELETE);
- if(wd == -1)
- printf("FAIL TO ADD WATCH TO %s\n", argv[1]);
- else
- printf("WATCHING DIRECTORY %s\n", argv[1]);
- // LOOP
- while(1) {
- i = 0;
- length = read(fd, buffer, BUF_LEN);
- if(length < 0)
- perror("read");
- while(i < length) {
- struct inotify_event *event = (struct inotify_event *)&buffer[i];
- if(event->len) {
- if(event->mask & IN_CREATE) {
- if(event->mask & IN_ISDIR)
- printf("DIRECTORY %s WAS CREATED\n", event->name);
- else
- printf("FILE %s WAS CREATED WITH WD %d\n", event->name, event->wd);
- }
- if(event->mask & IN_MODIFY) {
- if(event->mask & IN_ISDIR)
- printf("DIRECTORY %s WAS MODIFIED\n", event->name);
- else
- printf("FILE %s WAS MODIFIED WITH WD %d\n", event->name, event->wd);
- }
- if(event->mask & IN_DELETE) {
- if(event->mask & IN_ISDIR)
- printf("DIRECTORY %s WAS DELETED\n", event->name);
- else
- printf("FILE %s WAS DELETED WITH WD %d\n", event->name, event->wd);
- }
- i += EVENT_SIZE + event->len;
- }
- }
- }
- // CLEANING UP
- inotify_rm_watch(fd, wd);
- close(fd);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement