Computer Security

#23 파일 이벤트 (실습) 본문

리눅스 시스템 프로그래밍

#23 파일 이벤트 (실습)

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

디렉토리 두개를 지정해서 각 디렉토리 안에 파일이 생성되거나 삭제될때 이벤트를 호출해서 화면에 출력하는 예제를 작성 해보자.


1. 기본적인 뼈대를 구성 해준다.

main

 

 

 

 

 


2. inotify객체를 생성한다.

#include <sys/inotify.h>

int inotify_init(void);

i) inotify 객체를 생성하기 위해 fd를 하나 만든다.

 

ii) inotify_init이라는 API로 객체를 생성한다.

 

iii) 예외처리 해준다.

 

 

 

 

 

 


3. inotify 객체에 watch를 걸어준다.

wd1
err

#include <sys/inotify.h>

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

i) inotify_add_watch라는 API를 통해 watch를 추가한다.

 

ii) mask에 파일이 CREATE 됐을때랑, DELETE 됐을때 이벤트에 대해 감시해준다.

 

iii) watch descriptor를 선언 한 후, 받아온다.

 

iv) 예외처리 해준다.

 

 

 

 

 


4. watch를 하나 더 추가 해보자.

wd2

 

 

 

 

 

 


5. inotify 객체에 대해 buf 선언 후, read를 해주자.

read

 

i) struct 포인터 하나를 지정해준다.

 

ii) 처음 버퍼의 이벤트 시작점을 이벤트 포인터로 가져온다.

 

iii) 이벤트의 종류는 mask 로 확인하구, 실제 어떤 파일이 생성,삭제되었는지는 name을 본다.

 

iv) 이벤트의 포인터를 다음위치로 변경 해주는 루프를 설정한다.

 

v) while(1) 을 이용해 무한반복하자.

 

 

 

 

 


buf 안에는 아래의 내용이 들어있다.

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 */
    
};

 

 

 

 

 

 


6. 전체 코드이다.

inotify.c

 

 

 

 

 

 


7. gcc 컴파일 한 후 실행시켜보자.

일단  감시상태이다.

터미널을 하나 더 띄어서 우리가 설정한 디렉토리 내에서 파일을 만들어보자.

 

 

 

 

 


touch

다른 터미널에서 Kuri 라는 파일을 만드니, Kuri라는 파일이 만들어졌다 나온다!

 

 

 

 

 


rm

다른 터미널에서 Kuri 라는 파일을 삭제하니, Kuri 라는 파일이 삭제 되었다 나온다! 

반응형

'리눅스 시스템 프로그래밍' 카테고리의 다른 글

#25 I/O Multiplexing(select) (실습)  (0) 2022.09.30
#24 I/O Multiplexing(select)  (0) 2022.09.29
#22 파일 이벤트  (0) 2022.09.27
#21 파일 속성 제어 (실습)  (2) 2022.09.26
#20 파일 속성 제어  (0) 2022.09.25
Comments