Computer Security

#22 파일 이벤트 본문

리눅스 시스템 프로그래밍

#22 파일 이벤트

쿠리 Kuri 2022. 9. 27. 18:30
반응형

inotify

특정 파일/디렉토리에서 발생하는 이벤트를 감시하는 기능


 

inotify기능을 사용하기 위한 조건

 

1. inotify object를 하나 생성 해야한다.

2. watch 를 생성한다.(어떤 한 디렉토리를 감시 할 것인지 나타내는 서브객체)

 

 

 

 

 


inotify


 int inotify_init (void)
 int inotify_init1 (int flags)

 

파라미터

- flags

    - IN_NON_BLOCK : set non-blocking mode

    - IN_CLOEXEC : set close-on-exec

 

 

 

반환 값

- 성공 시 inotify 객체 ( file descriptor)

- 실패 시 -1

 

 

 

 

 

 


inotify_add_watch

생성해 놓은 inotify 객체 에다가 watch를 추가하기 위한 API 


 int inotify_add_watch (int fd, const char* pathname, int mask)

 

파라미터

- fd : inotify 객체

- pathname : 감시 대상 경로

- mask : 어떤 이벤트에 대해 어떻게 감시할 것인지 명시

 

 

 

 

반환 값

- 성공 시 watch descriptor

- 실패 시 -1

 

 

 

 

 


add watch 시 & event read 시 mask에 설정 가능

 

 

IN_ACCESS - 파일 엑세스

 

IN_MODIFY - 파일의 마지막 수정

 

IN_ATTRIB - 메타데이터 변경

 

IN_OPEN - 열림

 

IN_MOVED_FROM - 이름 변경 시 예전 이름

 

IN_MOVED_TO - 이름 변경 시 새로운 이름

 

IN_DELETE - 파일/디렉터리의 삭제

 

IN_CREATE - 파일/디렉터리의 생성

 

IN_DELETE_SELF - 감시중인 경로 자체가 삭제됨

 

IN_CLOSE_WRITE - 쓰기 권한 파일이 닫힘

 

IN_CLOSE_NONWRITE - 쓰기외 권한 파일이 닫힘

 

 

 

 

 

 


add watch시 mask에 설정 가능

 

 

 

IN_DONT_FOLLOW - symbolic link인 경우 추적 하지 않도록 함

 

IN_EXCL_UNLINK - WD에서 unlink된 파일에 대해 이벤트를 발생하지 않도록 함

 

IN_MASK_ADD - 이미 추가된 경로인 경우 기존 mask에 ORing

 

IN_ONESHOT - 이벤트 1회 발생 후 자동으로 WD를 삭제함

 

IN_ONLYDIR - 감시 경로가 디렉토리인 경우만 허용

 

 

 

 

 


event read 시 mask에 설정 가능

 

 

 

IN_IGNORED - 감시가 제거되었거나 감시경로가 제거된 경우

 

IN_ISDIR - 디렉토리인 경우

 

IN_Q_OVERFLOW - event queue가 overflow

 

IN_UNMOUNT - 감시 경로가 unmounted

 

 

 

 

 

 


watch descriptor를 제거하는 API

 int inotify_rm_watch (int fd, int wd)

 

파라미터

- fd : inotify 객체

- wd : 삭제할 watch descriptor

 

 

반환 값

- 성공 시 0

- 실패 시 -1

 

 

 

 

 


inotify 객체에 대해 read를 하면 어떤 이벤트가 발생했는지 알려주는 구조체

struct inotify_event{
    int   wd;        /* Watch descriptor */
    uint32_t mask;   /* Mask describing event */
    uint32_t cookie; /* Unique cookie associating 
                        related events (for rename(2)) */
    uint32_t len;    /* Size of name field */
    char name[];     /* Optional null-terminated name */
    
};
wd 감시 서술자(watch descriptor )
mask 이벤트 태그(event tag)
cookie IN_MOVED_FROM 및 IN_MOVED_TO 사이 동기화(일치)를 위한 쿠키(cookie)
len 이름 필드의 길이
name (부가요소) 이 이벤트와 관계된 파일 이름 (상위 디렉터리에 대해서 로컬 이름임.)

 

반응형
Comments