Add inotify example
This commit is contained in:
parent
49a25580bf
commit
0abb64fc99
68
src/main.c
68
src/main.c
|
@ -1,11 +1,69 @@
|
|||
/*This is the sample program to notify us for the file creation and file deletion takes place in “/tmp” directory*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/inotify.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
#define EVENT_SIZE (sizeof(struct inotify_event))
|
||||
#define EVENT_BUF_LEN (1024 * (EVENT_SIZE + 16))
|
||||
|
||||
int main()
|
||||
{
|
||||
printf("Hello systemd world \n");
|
||||
fflush(NULL);
|
||||
sleep(5);
|
||||
return (EXIT_SUCCESS);
|
||||
int length, i = 0;
|
||||
int fd;
|
||||
int wd;
|
||||
char buffer[EVENT_BUF_LEN];
|
||||
|
||||
/*creating the INOTIFY instance*/
|
||||
fd = inotify_init();
|
||||
|
||||
/*checking for error*/
|
||||
if (fd < 0) {
|
||||
perror("inotify_init");
|
||||
}
|
||||
|
||||
/*adding the “/tmp” directory into watch list. Here, the suggestion is to validate the existence of the directory before adding into monitoring list.*/
|
||||
wd = inotify_add_watch(fd, "/tmp", IN_CREATE | IN_DELETE);
|
||||
|
||||
/*read to determine the event change happens on “/tmp” directory. Actually this read blocks until the change event occurs*/
|
||||
|
||||
length = read(fd, buffer, EVENT_BUF_LEN);
|
||||
|
||||
/*checking for error*/
|
||||
if (length < 0) {
|
||||
perror("read");
|
||||
}
|
||||
|
||||
/*actually read return the list of change events happens. Here, read the change event one by one and process it accordingly.*/
|
||||
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("New directory %s created.\n",
|
||||
event->name);
|
||||
} else {
|
||||
printf("New file %s created.\n",
|
||||
event->name);
|
||||
}
|
||||
} else if (event->mask & IN_DELETE) {
|
||||
if (event->mask & IN_ISDIR) {
|
||||
printf("Directory %s deleted.\n",
|
||||
event->name);
|
||||
} else {
|
||||
printf("File %s deleted.\n",
|
||||
event->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
i += EVENT_SIZE + event->len;
|
||||
}
|
||||
/*removing the “/tmp” directory from the watch list.*/
|
||||
inotify_rm_watch(fd, wd);
|
||||
|
||||
/*closing the INOTIFY instance*/
|
||||
close(fd);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue