windows - Overvågning af filer asynkront

Indlæg af Hanne Mølgaard Plasc

Problem



På Unix: Jeg har været igennem FAM og Gamin, og begge ser ud til at levere et klient/server filovervågningssystem. Jeg vil hellere have et system, hvor jeg fortæller kernen at overvåge nogle inoder og det pokes mig tilbage, når hændelser opstår. Inotify kiggede lovende først på den side: inotify\_init1 Lad mig passere IN\_NONBLOCK som igen forårsagede poll() at vende tilbage direkte. Jeg forstod dog, at jeg skulle kalde det regelmæssigt, hvis jeg ønskede at have nyheder om de overvågede filer. Nu er jeg lidt under ideer.


Er der noget at overvåge filer asynkront?


PS: Jeg har ikke set på Windows endnu, men jeg vil også gerne have nogle svar om det også.

Bedste reference


Som Celada siger i kommentarerne ovenfor, er inotify og poll den rigtige måde at gøre dette på.


Signaler er ikke en mekanisme til rimelig asynkron programmering - og signalhåndteringen er bemærkelsesværdigt farlig for de uerfarne og endda for de erfarne. Man bruger dem ikke frivilligt til sådanne formål.


I stedet bør man strukturere et program omkring en hændelsesløkke (se http://en.wikipedia.org/wiki/Event-driven\_programming for en samlet forklaring) ved hjælp af afstemning, vælg eller et lignende systemopkald som kernen i din programmets hændelseshåndteringsmekanisme. [13]


Alternativt kan du bruge tråde eller tråde plus en begivenhedsløjfe.

Andre referencer 1


Men interessant er du svar, jeg er ked af det, men jeg kan ikke acceptere en mekanisme baseret på blokering af opkald på afstemning eller vælg, når spørgsmålet står 'asynkront', uanset hvor dybt det er skjult.


På den anden side fandt jeg ud af, at man kunne klare at rykke inotify asynkront ved at passere til inotify\_init1 flag IN\_NONBLOCK. Signaler udløses ikke som de ville have med aio, og et read opkald, der ville blokere blokering, ville indstille errno til EWOULDBLOCK i stedet.