티스토리 뷰
728x90
dnotify는 리눅스 커널 2.4에서 도입된 파일 시스템 이벤트 모니터링 메커니즘으로, 특정 디렉토리에서 발생하는 파일 시스템 이벤트를 감지할 수 있습니다. dnotify는 이후 더 발전된 inotify와 fanotify로 대체되었지만, 여전히 역사적인 이해를 위해 중요한 개념입니다.
주요 특징
- 디렉토리 전용: dnotify는 디렉토리에서 발생하는 이벤트만 모니터링할 수 있습니다. 파일 자체에 대한 모니터링은 지원하지 않습니다.
- fcntl 기반: dnotify는 파일 디스크립터와 fcntl 시스템 호출을 사용하여 이벤트를 설정합니다.
- 프로세스 전용 알림: 알림은 설정된 프로세스에만 전달됩니다. 이는 다수의 프로세스가 동일한 이벤트를 모니터링해야 할 경우 비효율적일 수 있습니다.
- 비효율성: 각 디렉토리마다 파일 디스크립터를 유지해야 하므로, 많은 디렉토리를 모니터링하는 데 비효율적입니다.
- 유지 보수 종료: dnotify는 더 이상 적극적으로 유지 보수되거나 발전되지 않으며, 대신 inotify와 fanotify가 권장됩니다.
사용법
dnotify를 사용하려면 fcntl 시스템 호출을 사용하여 특정 디렉토리에서 발생하는 이벤트를 모니터링할 수 있습니다. 아래는 dnotify를 사용하는 간단한 예제 코드입니다.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <errno.h>
void handle_event(int fd) {
printf("Directory modified\n");
}
int main() {
int fd;
char *dir_path = "/path/to/monitor";
// 디렉토리 열기
fd = open(dir_path, O_RDONLY);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
}
// dnotify 설정
if (fcntl(fd, F_NOTIFY, DN_MODIFY | DN_CREATE | DN_DELETE) == -1) {
perror("fcntl");
close(fd);
exit(EXIT_FAILURE);
}
// 이벤트 루프
while (1) {
pause(); // 이벤트 대기
handle_event(fd);
}
// 정리
close(fd);
return 0;
}
코드 설명
- 디렉토리 열기: open() 함수를 사용하여 모니터링할 디렉토리를 엽니다.
- dnotify 설정: fcntl() 함수를 사용하여 F_NOTIFY 플래그와 감시할 이벤트를 설정합니다. 여기서 감시할 이벤트는 DN_MODIFY(수정), DN_CREATE(생성), DN_DELETE(삭제)입니다.
- 이벤트 루프: pause() 함수를 사용하여 이벤트가 발생할 때까지 대기합니다. 이벤트가 발생하면 handle_event() 함수가 호출됩니다.
- 정리: 모니터링을 중지하고 파일 디스크립터를 닫습니다.
이 코드는 dnotify를 이용하여 지정된 디렉토리에서 파일 시스템 이벤트를 모니터링하는 기본적인 방법을 보여줍니다. 실제로는 inotify나 fanotify를 사용하는 것이 더 효율적이고 다양한 기능을 제공합니다.
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 현포다이브
- 블루버블다이브팀
- Linux
- effective
- C#.NET
- 제주도
- 울릉도
- C# 고급 기술
- OpenSource
- Windows
- PowerShell
- 암호화
- 성산블루버블
- script
- 외돌개
- C++
- 스쿠버다이빙
- Build
- DLL
- 블루버블
- C#
- 서귀포
- 네트워크 정보
- 서귀포블루버블
- Effective c++
- 스쿠버 다이빙
- CMake
- 패턴
- 블루버블다이빙팀
- C
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함
250x250