내 문제는 여러 디렉토리를보기 위해 inotify를 사용하고 read() 함수를 사용하여 변경 사항을 읽는 것이다. 필자가 지적 하듯이, read() 함수는 현재보고있는 디렉토리에 무슨 일이 생길 때까지 프로그램을 멈추기 때문에 "same time"("for"루프)에서 모든 디렉토리를 볼 수 없다.read() 블록 때문에 여러 디렉토리를 볼 수 없다.
는 "기본"코드가 간단 해집니다 : 변경된 파일의 경로를 반환 get_event
while (1){
for(int i = 0; i < numberOfDirectories; i++){
string fileEnd = get_event(fd[i], catalogs[i]).c_str());
if(string != "") do some code;
}
sleep(1);
}
은 inotify를, 카탈로그의 [I]는 예 [i]를 지켜 디렉토리의 이름을 포함을 전략 중.
그리고 거기 get_even의 FUNC의 일부 코드 :
#define BUFF_SIZE ((sizeof(struct inotify_event)+FILENAME_MAX)*1024)
string get_event(int fd, string target)
{
ssize_t len;
char buff[BUFF_SIZE] = {0};
len = read (fd, buff, BUFF_SIZE);
루프 정지 작업 "에 대한"기본이 시점에서는 뭔가 먼저 디렉토리에 일어날 때까지 기다립니다. 변경 사항을 기다리는 대신 감시 된 디렉터리에 변경 사항이 있는지 확인하고 싶습니다.
도움말 : < 당신이 LINUX/UNIX의 경우
fcntl (fd, F_SETFL, O_NONBLOCK); 일했습니다! 고마워요 :) – wendigu