특정 파일명이 생성되면 알림을 받고 싶습니다. 내가보고 있어요inotify
. 이 IN_CREATE
플래그를 사용하여 디렉터리의 모든 변경 사항을 모니터링할 수 있지만 관심 있는 파일 외에 디렉터리에 많은 활동이 있을 수 있으므로 전체 디렉터리를 모니터링하고 싶지는 않습니다. 이것이 가능합니까?
답변1
커널이 특정 경로에 대한 변경 사항만 알리도록 할 수는 없습니다. 그 이유는 약간 미묘합니다.
Linux에서 파일 개체는 이름과 관계없이 존재합니다. 파일 이름은 실제로 포함된 디렉터리의 속성이며 단일 파일은 둘 이상의 이름으로 호출될 수 있습니다(하드 링크 참조).
커널에는 inotify 개체를 추가할 항목이 있어야 합니다. 경로 이름은 실제 파일 시스템 개체가 아니기 때문에 경로에 설명된 상위 디렉터리나 파일에 추가해야 합니다. 하지만 주어진 파일에 대한 변경 사항이 아니라 주어진 이름을 가진 파일이 생성되었는지 여부를 관찰하고 있기 때문에 파일에 추가할 수 없습니다.
이론적으로 커널은 이벤트 유형을 선택할 수 있는 것과 마찬가지로 디렉토리에 감시를 추가할 때 주어진 경로 이름에 대한 이벤트를 선택할 수 있는 API를 구현할 수 있습니다. 이로 인해 API가 비대해지고 커널은 결국 사용자 공간에서와 동일한 데이터를 처리하고 동일한 문자열 비교를 수행하게 됩니다.
매우 활동적인 디렉토리에 시계를 배치하면 성능에 눈에 띄는 영향이 있습니까? 초당 수십, 수백, 수백만 개의 파일이 얼마나 활동적이라는 뜻인지 잘 모르겠습니다.
어쨌든, 나는 그것을 피하고 싶습니다 access
. 그것은 항상 혼란스러울 것입니다. 호출 사이에 파일을 생성하고 삭제할 수 있으며 access
, access
매우 긴밀한 루프에서 호출하면 속도가 느려질 수 있는데, 이것이 inotify
해결하도록 설계된 문제입니다.