Windows에 inotify와 같은 것이 있습니까?


103

Linux OS에는 파일 시스템의 변경 사항을 애플리케이션에 알리는 ionotify 하위 시스템이 있습니다.

그러나 저는 주로 Windows 사용자이므로 파일 시스템 변경 사항을 모니터링하는 유사한 방법이 있는지 궁금합니다.


9
나는 그러한 질문이 주제에서 벗어난 것이라고 생각하지 않습니다. 이 질문은 도구 / 소프트웨어 라이브러리와 매우 다른 OS API를 요구합니다. 특정 파일 / 파일이 수정 될 때 Windows 응용 프로그램에서 알림을받는 방법과 같이 다르게 표현 될 수 있습니다.
balki

1
재 개설 투표 : 질문은 특정 운영 체제 API에 대한 비교 가능한 대안을 요청하는 것이며 "나는 영국에서 왔고 음식을 먹기 위해 포크를 사용합니다. 일본에서는 비슷한 방식으로 어떤기구를 사용합니까? " 그 비유를 사용하여 받아 들여지는 대답은 "젓가락 사용"입니다.
David

답변:



42

경우에 당신은 사용하고있는 .NET을 사용을 FileSystemWatcher. 자세한 정보 : http://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.aspx

당신이 사용하는 경우 C , 사용 FindFirstChangeNotification, FindNextChangeNotification, ReadDirectoryChangesW. 자세한 정보 : http://msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx

OSX , 관련 API는이다 fseventsAPI를.

그것들은 모두 서로 미묘하게 다르며 모두 엣지 케이스에서 의심스러운 신뢰성을 가지고 있습니다. 일반적으로 모든 변경 사항을 100 % 완벽하게보기 위해 이러한 API에 의존 할 수는 없습니다. 파일 시스템 모니터링을 사용하는 대부분의 사람들은 푸시 API에서 손실되거나 불완전한 정보를 보상하기 위해이를주기적인 스캔과 결합합니다.


6
"inotify에 대한 엣지 케이스의 의심스러운 신뢰성에 대해 인용 해 주시겠습니까?
Pharaun aug

18
fs watcher api의 소비자가 다른 프로세스가 이벤트를 생성하는 것보다 이벤트를 읽는 속도가 느리면 커널은 다른 프로세스 (우선 순위가 더 높은)에서 파일 시스템 수정을 보류하거나 버퍼의 무제한 증가를 허용해야합니다. inotify의 버퍼 깊이 (맨 페이지에 설명 된대로)는 / proc / sys / fs / inotify / max_queued_events에 의해 제어됩니다. 이 외에도 IN_Q_OVERFLOW 알림을 받게됩니다. 이것은 좋지만 때때로 다시 검색해야하는 상황에 남아 있습니다.
blucz

아하 맞아요, 최근에 줄을 읽고 있었어요. 이 엣지 케이스는 모니터링하는 파일 수에 따라 다르며 모든 변경 사항을 추적하는 것이 중요한지 또는 일부를 놓칠 수 있는지 여부에 따라 달라집니다. 그러나 그것은 좋은 지적입니다. 감사합니다 :)
Pharaun 2010-08-19

@blucz 커널 사람들이 이러한 상황을 어떻게 해결하는지 궁금합니다. 그들이 이것을하는 것을 아는 것은 좋은 일이며, 디자인과 구현에 더 확신을 갖게합니다.
n611x007 2013 년


11

Microsoft의 JNotify 또는 FileMon .


8
JNotify는 크로스 플랫폼 호환성이 필요했기 때문에 제게 완벽했습니다. JAVA_HOME 만 올바르게 설정되었다고 가정하고 cygwin, mac 및 linux에서 작동하는 단일 bash 스크립트를 작성할 수도 있습니다. 이것은 "내 파일이 삭제되었습니다!"라고 말하는 고객의 컴퓨터 문제를 디버깅하는 데 큰 도움이되었습니다. 실제로 로그를보고 그 일이 어떻게 / 언제 일어 났는지 알아낼 수 있습니다.
cmyers 2012-07-24

1
FileMon은 이제 ProcessMonitor technet.microsoft.com/en-us/sysinternals/bb896645
MECU

10

조금 늦었지만 ...

Windows에는 앱을 실행하지 않고도 이벤트를 모니터링 할 수있는 OSX 이벤트와 유사한 기능이 있습니다. Windows USN 저널은 모든 파일 변경 사항을 추적합니다. Jeffrey Richter (Advanced Windows의 저자)는 MSDN Journal에 대한 작업 샘플 로 훌륭한 기사 를 작성했습니다 . 업데이트 : MSJ가 더 이상 MS에서 온라인 상태가 아니므로 archive.org의 기사 입니다.

USN 변경 저널에 대한 MSDN 설명서.

USN Change Journals는 전체 볼륨을 모니터링해야하는 백업 도구 또는 인덱스와 같은 애플리케이션을 구축하는 경우 더 좋습니다.


어떤 다른이의 버그 문제가 발생하지 않도록 그것에 의존 않는 USN 저널 방법입니다 FileSystemWatcher| FindFirstChangeNotification PhillipBrandonHolmes말한 것은 ?
n611x007 2013 년

4
이 작업을 한 지 오래되었지만 FileSystemWatcher 또는 FindFirstChangeNotification을 사용하지 않습니다. Jeffery Richter의 예제를 기반으로 Go에서 Windows 이벤트 감시자를 작성하기 시작했습니다. 내가 한 약간의 테스트에서, 그것은 견고하고 OS X의 fsevents와 비슷하게 아무것도 놓친 것이 없습니다. Gist는 여기에 있습니다 : gist.github.com/pkrnjevic/7219861
Peter Krnjevic 2013 년

@PeterKrnjevic Jeffrey Richter의 기사 링크를 업데이트 할 수 있습니까?
SOUser

@SOUser, MS 비트로 인해 기사가 이제 archive.org에서 링크되었습니다.
Peter Krnjevic 19

3

FileSystemWatcher ()는 주로 감시자 버퍼에 대한 오류 처리가 다소 불완전하다는 사실 때문에 신뢰할 수 없습니다. 경로 및 자세한 오류 처리 정보가 없기 때문에 Microsoft는 작업 디렉터리를 복구하거나 수동으로 폴링 할 방법을 제공하지 않습니다.

이 버그 ^가 win32에서 파생 되었기 때문에 Windows 용 JNotify도 신뢰할 수 없습니다. JNotify는 win32를 사용합니다. 따라서 FileSystemWatcher ()와 다르지 않습니다.


이 '속도'/ '경주'/ '오버플로'와 같은 문제를 해결하기 위해 역할을 설계하는 방법에 대해 생각하면서 커널이 어떻게 해냈는지 궁금했습니다. 흥미 롭군. 이것은 네트워킹 및 로깅에서도 발생합니다. 이 문제에 이름이 있습니까?
n611x007 2013 년

네, 이름은 "버그"입니다. 버그 (win32)는 현재까지 Microsoft에서 만든 모든 운영 체제에 남아 있습니다. 이로 인해 모든 Microsoft 운영 체제는 파일 감시 유형 솔루션에 적합하지 않습니다. 당신은 그것을 달성하기 위해 * nix로 가야합니다. 때로는 보안상의 이유로 의도적으로이 버퍼 오버플로를 남겨 두었다고 생각합니다.
Phillip Brandon Holmes

하하 .. 예 .. 이름은 의도적 인 클러스터 클러 지이므로 마이크로 소프트의 파일 시스템을 의도적으로 감시 할 수 없습니다. 보안 문제로 인해 남겨진 버그입니다.
Phillip Brandon Holmes

1

나는 약간의 검색을했고, Windows와 비슷한 것을 본 기억이있는 것 같습니다. .NET 용 FileSystemWatcher 가 있습니다 . 주로 NT 또는 XP 이상입니다.


일반적으로 NTFS 파일 시스템에서만 사용할 수 있지만 FAT16, FAT32 또는 새로운 exFAT에서는 사용할 수 없습니다.
Mastacheata

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.