Moin,
Nach dem Script-Start habe ich die Datei von der Konsole aus gelöscht, was ja nicht gehen dürfte, wenn es sich bei flock um eine Kernelfunktion handeln würde.
QED
Unix-Systeme sind nicht so schlecht wie Windows-Systeme. Du kannst _immer_ eine Datei problemlos löschen, verschieben oder umbenennen während ein Prozess sie geöffnet hat. Wenn der Prozess nämlich die Datei öffnet, bekommt er nur einen Filehandle zurück und wenn er den erstmal hat ist der Dateiname nicht mehr nötig. Intern wird nur noch mit dem Handle gearbeitet, d.h. kannst nun ausserhalb mit dem Dateinamen anstellen was du willst. Es gibt (IIRC) nicht mal eine eindeutige Möglichkeit vom Handle auf den Dateinamen zu schliessen (zumindest nicht zwingend auf allen Systemen). Das kann ja auch gar nicht gehen, weil Unix-Systeme in der Regel auch Hardlinks kennen, also mehrere Dateinamen für die selbe Datei.
Wenn du die Datei 'löscht' während sie noch geöffnet ist, wird einfach nur dieser eine Dateiname entfernt und der Linkcounter um eins verringert. Wenn der Counter auf 0 steht und die Datei geschlossen wird, wird der ihr zugewiesene Speicherplatz freigegeben. Umbenennen ist völlig problemlos und Verschieben entspricht kopieren und löschen.
Was das weitere angeht: fcntl ist immer advisory locking: http://www.gnu.org/manual/glibc-2.0.6/html_chapter/libc_8.html#SEC146. Es gibt zwar auch mandatory locking (http://web.systhug.com/kernel-lock/) aber das riecht nach einer Linux-Extrawurst und ist wahrscheinlich nicht portabel.
--
Henryk Plötz
Grüße aus Berlin