Herausfinden wann eine Datei kopiert ist

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Herausfinden wann eine Datei kopiert ist

    Hallo,

    in einem Programm möchte ich Dateien erst behandeln, wenn diese "stabil" sind, also keiner mehr darauf zugreift, bzw. diese gerade noch schreibt.

    Die Dateien werden mit Linux, Windows und Mac-Clients kopiert.

    Nach einigen Versuchen mit mtime und Co muss ich feststellen, das samba und netatalk diese zunächst beim erstellen eines Files auf aktuelle Zeitwerte setzen und anschliessend auf die des "originals" (als von dort wo die Datei herkommt).

    Mit fuser kann ich auch nicht arbeiten, da die Daten auf einem NFS liegen. fuser funktioniert nur mit lokalen Prozessen.

  • #2
    Versuch doch, die Datei zu locken. Solange du sie nicht locken kannst, greifen andere Prozesse auf die Datei zu. Im Erfolgsfall weißt du, dass keiner darauf zugreift.
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      Original geschrieben von unset
      Versuch doch, die Datei zu locken. Solange du sie nicht locken kannst, greifen andere Prozesse auf die Datei zu. Im Erfolgsfall weißt du, dass keiner darauf zugreift.
      Leider funktioniert flock() nicht auf NFS, resp. es funktioniert nur für Prozesse eines OS. Das bedeutet, der schreibende Prozess (samba/netatalk/...) muss sich auf dem selben Rechner befinden wie der PHP-Prozess.

      Eigentlich bleiben nur externe Merkmale, wie die Dateigröße und das Erstellungs-, Änderungsdatum. Leider werden beide Faktoren stark vom schreibenden Daemon beeinflusst. So steht bei manchen die Datei mit einem Rutsch zur Verfügung (out of place-, oder tmp-inbound) und bei anderen wächst sie blockweise (in place inbound).

      Beim Timestamp wird oft bei "in place" kopien zunächst eine neue Datei mit aktuellem ts erstellt und nach vollständigem schreiben auf den Wert der ursprungsdatei gesetzt.

      Kommentar

      Lädt...
      X