LessWire schriebEs ist korrekt, wenn inotify mit "IN_CREATE" sofort reagiert, sobald ein neues file lediglich geöffnet wird - aber der Zugriff auf dieses mit Schreibrecht geöffnete File (write lock) sollte dann nicht möglich sein.
Ich kann mir nicht vorstellen, dass das tatsächlich möglich ist. Woran ist den zu erkennen, dass die Datei noch geschrieben wird, während Du sie schon zum Lesen öffnen kannst?
Ich vermute etwas anderes: Es gibt relativ oft (z.B. bei log files) die Situation, dass einer eine Datei zunächst erst einmal anlegt, damit sie vorhanden ist, d.h. damit ihr Name festliegt. Dann macht er sie zu und tut etwas anderes. Und dann, später, öffnet er sie und schreibt etwas hinein. Man muss ja auch folgendes sehen: das Schliessen einer Datei ist gleichbedeutend mit dem endgültigen Leeren der Schreibpuffer. Wer wirklich zu einem gegebenen Zeitpunkt sicherstellen muss, dass alles in die Datei geschrieben worden ist, muss sie flushen oder schliessen. Wahrscheinlich kommst Du auch in eine solche Phase, in der die Datei zwischenzeitlich mal geschlossen ist. Deshalb gelingt das Öffnen zum Lesen. (Wenn das allerdings so ist, kann der andere Prozess die Datei dann nicht zum Schreiben öffnen ...)
Bei solchen Sachen, es handelt sich ja letztendlich um eine primitive Form von Interprozesskommunikation, muss man manchmal sleeps u.ä. einbauen, um dem anderen bisschen Zeit zu geben, insbesondere wenn man nicht genau weiss, wie er vorgeht. Und man muss drauf achten, dass man ihn nicht dauerhaft blockiert, d.h. Du solltest, wenn Du nichts lesen kannst, die Datei umgehend schliessen, dann bisschen warten und sie dann wieder neu öffnen. Machste ja, allerdings ist das Lesen der Datei bei Dir von dem event abhängig, und das kommt später nicht mehr, es kommt ja nur, wenn eine Datei neu erstellt wird. Ich würde dieses event benutzen, um nur die while-Schleife zu starten. Diese sollte aber das Lesen der Datei dann unbedingt durchführen, solange diese existiert, und in jedem Schleifendurchlauf ein sleep() stehen haben. Das wäre die einfachste Variante, die Datei quasi pollen. Eleganter wäre die Reaktion jeweils auf ein event, das durch IN_MODIFY oder IN_CLOSE_WRITE ausgelöst wird.