[리눅스] 이벤트 기반 모니터링

목차

  1. 소개
  2. inotify 이벤트
  3. 사용 예제
  4. 결론

1. 소개

이벤트 기반 모니터링은 파일 시스템의 변경을 실시간으로 감지하고 처리하는 기술을 말합니다. 리눅스 환경에서는 inotify API를 사용하여 파일 시스템 이벤트를 모니터링할 수 있습니다.

2. inotify 이벤트

inotify API는 다양한 파일 시스템 이벤트를 감지할 수 있습니다. 주요 이벤트에는 파일 생성, 파일 삭제, 파일 수정, 폴더 생성, 폴더 삭제 등이 있습니다. 이러한 이벤트는 디렉터리마다 따로 모니터링할 수 있으며, 실시간으로 이벤트를 감지하고 콜백 함수를 호출할 수 있습니다.

3. 사용 예제

다음은 inotify를 사용하여 특정 디렉터리의 변경을 모니터링하는 간단한 C언어 예제입니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/inotify.h>

#define EVENT_SIZE  (sizeof(struct inotify_event))
#define BUF_LEN     (1024 * (EVENT_SIZE + 16))

int main() {
    int fd, wd;
    fd = inotify_init();
    wd = inotify_add_watch(fd, "/path/to/directory", IN_MODIFY | IN_CREATE | IN_DELETE);

    char buffer[BUF_LEN];

    while (1) {
        int length = read(fd, buffer, BUF_LEN);
        if (length < 0) {
            perror("read error");
            exit(EXIT_FAILURE);
        }

        while (i < length) {
            struct inotify_event *event = (struct inotify_event *) &buffer[i];
            if (event->len) {
                if (event->mask & IN_CREATE) {
                    printf("File created: %s\n", event->name);
                } else if (event->mask & IN_DELETE) {
                    printf("File deleted: %s\n", event->name);
                } else if (event->mask & IN_MODIFY) {
                    printf("File modified: %s\n", event->name);
                }
            }
            i += EVENT_SIZE + event->len;
        }
    }

    close(fd);
    return 0;
}

4. 결론

리눅스에서 inotify를 통해 파일 시스템 이벤트를 모니터링할 수 있으며, 이를 활용하여 실시간으로 파일 시스템의 변경을 감지하고 서비스에 반영할 수 있습니다.

참고 자료