inotify 모니터링 파일 및 폴 더
2265 단어 notify
상세 한 설명 은 참고 할 수 있다.
http://www.ibm.com/developerworks/cn/linux/l-inotifynew/
주의해 야 할 것 은 inotify 가 읽 은 구조 체 의 마지막 구성원 이 일정 하지 않다 는 것 이다.따라서 이 벤트 를 읽 은 후 강 한 전환 형식 이 필요 합 니 다. 다음은 테스트 코드 입 니 다.
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/inotify.h>
char *files[]={
"t1","t2","t3"
};
struct st_files{
char *filename;
int wd;
};
struct st_files file_wd[3];
char * event_array[]={
"File was accessed",
"File was modified",
"File attributes were changed",
"writtable file closed",
"unwrittable file closed",
"File was opened",
"File was moved from X",
"File was moved to Y",
"Subfile was created",
"Subfile was deleted",
"Self was deleted",
"Self was moved",
"",
"Backing fs was unmounted",
"Event queued overflowed",
"File was ignored"
};
int main(void){
int fd;
int wd;
char buffer[1024];
char *offset=NULL;
struct inotify_event *event=NULL;
int len,tmp_len;
int i;
fd=inotify_init();// inotify
for(i=0;i<3;i++){
wd=inotify_add_watch(fd,files[i],IN_ALL_EVENTS);// , wd
if(wd<0) perror("inotify_add_watch failed");
file_wd[i].filename=files[i];
file_wd[i].wd=wd;
}
while(len=read(fd,buffer,1024)){// ,read
offset=buffer;
printf("some event happens, len = %d.
",len);
event=(struct inotify_event *)buffer;
while((char *)event-buffer<len){
//offset=buffer;
//event=(struct inotify_event*)buffer;
for(i=0;i<3;i++){
if(event->wd!=file_wd[i].wd) continue;
printf("file %s is %d
",file_wd[i].filename,i);
break;
}
for(i=0;i<16;i++){
if(event_array[i][0]=='\0') continue;
if(event->mask&(1<<i)){
printf("%s
",event_array[i]);//
}
}
tmp_len=sizeof(struct inotify_event)+event->len;
event=(struct inotify_event*)(offset+tmp_len);
offset+=tmp_len;
}
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[enebular 사용해 보았다] Alexa와 LINE Notify를 사용하여 끈 생활을 업데이트*이쪽의 기사는 3/25의 enebular meetup에서의 발표 내용입니다. 어느 날, 나는 문득 생각했습니다. "움직이고 싶지 않아" 지붕 위에서 자고있는 고양이와 소파에 자고있는 개처럼되고 싶습니다. 그런 것을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.