Пример #1
0
void KConfigPropagator::commit()
{
  updateChanges();

  Change *c;
  for( c = mChanges.first(); c; c = mChanges.next() ) {
    c->apply();
  }
}
Пример #2
0
void FileMon::update() {
#ifdef WIN32
  MsgWaitForMultipleObjectsEx(0,NULL,0,QS_ALLINPUT,MWMO_ALERTABLE);

  //
  DWORD dwWaitResult = WaitForSingleObject(ghMutex,INFINITE);

  while(true) {
    if(dwWaitResult==WAIT_OBJECT_0) {
      updateChanges();

      if(!ReleaseMutex(ghMutex)) {
        std::cout << "FileMon : Release mutex err.\n";
      }

      break;
    } else if(dwWaitResult==WAIT_ABANDONED) {
      break;
    }
  }
#endif

#ifdef LINUX

  if(!notify) {
    return;
  }

  const int bufSize=((sizeof(struct inotify_event)+FILENAME_MAX)*1024);

  fd_set mDescriptorSet;
  FD_ZERO(&mDescriptorSet);
  FD_SET(notify,&mDescriptorSet);

  struct timeval mTimeOut;
  mTimeOut.tv_sec = 0;
  mTimeOut.tv_usec = 0;

  int ret = select(notify + 1,&mDescriptorSet,0,0,&mTimeOut);

  if(ret < 0) {
    perror("select");
  } else if(FD_ISSET(notify,&mDescriptorSet)) {
    ssize_t len,i = 0;
    char action[81+FILENAME_MAX] ={ 0 };
    char buff[bufSize] ={ 0 };
    len = read(notify,buff,bufSize);

    while(i < len) {
      struct inotify_event *pevent = (struct inotify_event *)&buff[i];
      std::string n=watchMap[pevent->wd]+"/"+std::string(pevent->name);
      time_t t=time(0);

      if(IN_MOVED_TO & pevent->mask || IN_CREATE & pevent->mask) {
        changeTimes.insert(std::make_pair(n,t));
      } else if(IN_CLOSE_WRITE & pevent->mask) {
        changeTimes.insert(std::make_pair(n,t));
      } else if(IN_MOVED_FROM & pevent->mask || IN_DELETE & pevent->mask) {
      }

      i += sizeof(struct inotify_event) + pevent->len;
    }
  }

  updateChanges();
#endif
}