What is the proper way to use inotify?

后端 未结 4 961
一生所求
一生所求 2020-11-30 02:22

I want to use the inotify mechanism on Linux. I want my application to know when a file aaa was changed. Can you please provide me with a sample ho

4条回答
  •  时光说笑
    2020-11-30 02:59

    • Documentation ( from Monitor file system activity with inotify )

    The inotify C API

    inotify provides three system calls to build file system monitors of all kinds:

    • inotify_init() creates an instance of the inotify subsystem in the kernel and returns a file descriptor on success and -1 on failure. Like other system calls, if inotify_init() fails, check errno for diagnostics.
    • inotify_add_watch(), as its name implies, adds a watch. Each watch must provide a pathname and a list of pertinent events, where each event is specified by a constant, such as IN_MODIFY. To monitor more than one event, simply use the logical or — the pipe (|) operator in C—between each event. If inotify_add_watch() succeeds, the call returns a unique identifier for the registered watch; otherwise, it returns -1. Use the identifier to alter or remove the associated watch.
    • inotify_rm_watch() removes a watch.

    The read() and close() system calls are also needed. Given the descriptor yielded by inotify_init(), call read() to wait for alerts. Assuming a typical file descriptor, the application blocks pending the receipt of events, which are expressed as data in the stream. The common close() on the file descriptor yielded from inotify_init() deletes and frees all active watches as well as all memory associated with the inotify instance. (The typical reference count caveat applies here, too. All file descriptors associated with an instance must be closed before the memory consumed by the watches and by inotify is freed.)

    • An example ( from Kernel Korner - Intro to inotify )
    #include "inotify.h"  
    #include "inotify-syscalls.h"  
    int wd;   
    wd = inotify_add_watch (fd,   
                "/home/rlove/Desktop", IN_MODIFY | IN_CREATE | IN_DELETE);
    if (wd < 0)
          perror ("inotify_add_watch");
    

    This example adds a watch on the directory /home/rlove/Desktop for any modifications, file creations or file deletions.

提交回复
热议问题