<div class="gmail_quote">On Fri, Dec 4, 2009 at 8:39 AM, Svein Ove Aas <span dir="ltr">&lt;<a href="mailto:svein.ove@aas.no">svein.ove@aas.no</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br>
That said.. you say you have to handle the events &quot;fast&quot;. What happens<br>
if you don&#39;t?</blockquote><div><br></div><div>If you don&#39;t handle events quickly, they&#39;re typically thrown away by the kernel without you ever getting to read them. That is, for instance, what happens on Linux with inotify. Throwing away events means that your app&#39;s internal mirror of the filesystem state becomes wrong, which is Very Bad for most applications that care. (i.e. Ross&#39;s assertion than nothing bad will happen is generally not true.)</div>
<div><br></div><div><i>However</i>, with inotify you <i>also</i> can&#39;t afford to perform a single read system call per event, because that will cause your &quot;watch the filesystem&quot; event to soak up most of the system&#39;s CPU time. So what you have to do is select to listen for &quot;there&#39;s an event ready to be read&quot;, then sleep a little while, <i>then</i>┬áread in the hope that many (but not too many!) events will have been queued that you can all read at once.</div>
<div><br></div><div>And at that point, you&#39;ll be getting a stale notification about a file or directory that may no longer even exist, or may have changed type. Consider: I create a file f, write data into it, rename it to g, then create a directory named f. You wake up 10 milliseconds later, and the first event you hear about is that a file named f was created.</div>
<div><br></div><div>This is all by way of saying that working with filesystem change notification interfaces is extremely subtle and tricky, enormously more so than you&#39;d think on casual inspection. It&#39;s very easy to write a program that uses these interfaces in ways that will make it either generate garbage or consume huge amounts of CPU, and in fact the common case is to write a program that does both.</div>
</div>