Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wie auf vollständige Datei warten?

2 views
Skip to first unread message

Edzard Egberts

unread,
Sep 13, 2018, 11:18:36 AM9/13/18
to
Über FTP werden Dateien übertragen und mit Verzeichnisüberwachung in ein
Programm übernommen. Die Verzeichnisüberwachung übergibt die neue Datei
bei Neuanlage, zu diesem Zeitpunkt wird die aber noch geschrieben, so
dass ein sofortiges Laden der Datei schief geht.

Wie kann ich feststellen, dass die Datei noch geschrieben wird? Die
lässt sich problemlos öffnen, während noch geschrieben wird, es müsste
aber doch eine Möglichkeit geben, festzustellen, dass da noch ein
anderer Prozess zugreift?

Einfach etwas abwarten funktioniert, hält das Programm aber zu lange
auf. Öffnen und mehrfach die Länge abfragen, bis sich nichts mehr
ändert, wäre wahrscheinlich eine etwas schnellere Methode, ist aber auch
nicht gerade elegant. Noch eine Idee?

Helmut Waitzmann

unread,
Sep 13, 2018, 12:00:49 PM9/13/18
to
Edzard Egberts <ne...@edzeg.net>:
>Über FTP werden Dateien übertragen und mit Verzeichnisüberwachung in
>ein Programm übernommen. Die Verzeichnisüberwachung übergibt die neue
>Datei bei Neuanlage, zu diesem Zeitpunkt wird die aber noch
>geschrieben, so dass ein sofortiges Laden der Datei schief geht.
>
>Wie kann ich feststellen, dass die Datei noch geschrieben wird? Die
>lässt sich problemlos öffnen, während noch geschrieben wird, es müsste
>aber doch eine Möglichkeit geben, festzustellen, dass da noch ein
>anderer Prozess zugreift?

Dazu ist mir nichts bekannt.

Andere Idee: Kannst Du das schreibende Programm dazu bringen,
dass es nach dem Schließen der Datei noch eine weitere (nur zu dem
Zweck) anlegt, dass Du an ihr sehen kannst, dass es mit der ersten
fertig ist?

Thomas Orgelmacher

unread,
Sep 13, 2018, 12:40:02 PM9/13/18
to
Am 13.09.18 um 17:18 schrieb Edzard Egberts:
>
> Einfach etwas abwarten funktioniert, hält das Programm aber zu lange auf. Öffnen
> und mehrfach die Länge abfragen, bis sich nichts mehr ändert, wäre
> wahrscheinlich eine etwas schnellere Methode, ist aber auch nicht gerade
> elegant. Noch eine Idee?

Sich von inotify benachrichtigen lassen, wenn die Datei geschlossen wird z.B.


Thomas

--
I have seen things you lusers would not believe. I've seen Sun
monitors on fire off the side of the multimedia lab. I've seen
NTU lights glitter in the dark near the Mail Gate. All these
things will be lost in time, like the root partition last week.

Rainer Weikusat

unread,
Sep 13, 2018, 12:44:19 PM9/13/18
to
Inotify?

Damit kann man eine Benachrichtigung bekommen, wenn eine Datei
geoeffnet, dh neu angelegt wurde (IN_OPEN), und wann der schreibende
Prozess sie geschlossen hat (IN_CLOSE_WRITE).

Friedhelm Waitzmann

unread,
Sep 13, 2018, 12:53:09 PM9/13/18
to
Edzard Egberts:
>Über FTP werden Dateien übertragen und mit Verzeichnisüberwachung in ein
>Programm übernommen. Die Verzeichnisüberwachung übergibt die neue Datei
>bei Neuanlage, zu diesem Zeitpunkt wird die aber noch geschrieben, so
>dass ein sofortiges Laden der Datei schief geht.

>Wie kann ich feststellen, dass die Datei noch geschrieben wird? Die
>lässt sich problemlos öffnen, während noch geschrieben wird, es müsste
>aber doch eine Möglichkeit geben, festzustellen, dass da noch ein
>anderer Prozess zugreift?

Welches Betriebssystem? Für POSIX kenne ich nur das Programm
fuser.


Friedhelm

Edzard Egberts

unread,
Sep 14, 2018, 2:17:05 AM9/14/18
to
Edzard Egberts wrote:
> > Noch eine Idee?

> inotify

Danke @all, guter Tipp!

Ich verwende zur Zeit F_NOTIFY:

fcntl(fd, F_SETSIG, SIGRTMIN);
fcntl(fd, F_NOTIFY, DN_CREATE | DN_MULTISHOT);

Das bietet aber kein IN_CLOSE_WRITE und dass es da noch ein erweitertes
inotify gibt, hätte ich nicht erwartet. Das habe ich jetzt aber direkt
in den man-pages gefunden, sogar mit Programmbeispiel. Das Problem wäre
also gelöst! :o)
0 new messages