korrupte Bilddaten durch Mehrfachzugriff

Gast #4285234
Lesenswert?

Moin,

ist PC-Programmierung die richtige Kategorie für RaspberryPies mit 
Debian? Ansonsten bitte ich um Entschludigung und Verschiebung.
Ich habe eine PiCAM und ein Skript im Hintergrund, was ständig ein 
Standbild als JPG aufnimmt und es in den Ordner des Webservers 
speichert. Bedingt durch die relativ geringe Uploadgeschwindigkeit 
passiert es sehr häufig, dass während der Webserver das Bild überträgt 
es vom Skript schon wieder neu aufgenommen wird und die Daten 
überschrieben werden.
In welcher Richtung muss ich suchen, um so ein Problem zu verhindern? 
Kann ich dem Webserver beibringen, dass er sich eine temporäre Kopie von 
den zu sendenden Daten anlegt, damit diese nicht zerstört werden können? 
Wie sieht das ganze aus, wenn mehrere Benutzer auf dieselbe Datei 
zugreifen? Mir fehlt irgendwie eine Richtung in der ich eine Lösung 
finden kann.

Danke.
Gast #4285266
Lesenswert?

Stichwort Semaphore.

Der Zugriff wird vom Webserver gesperrt, wenn er lesen will und gibt den 
zugriff wieder frei, wenn er das Bild gelesen hat. Ebenso macht es dein
Skript. Beide müssen aber gegenseitig prüfen, ob nicht gerade die 
jeweils andere Software auf das Bild zugreift.
#4285507
Lesenswert?

Bevor "aufwendig" synchronisiert wird, einfach umbenennen (wie schon 
oben geschrieben).

(1) Der Writer erzeugt eine temporäre Datei und, wenn fertig 
geschrieben, nennt sie in die Zieldatei um.

(2) Der Reader wartet auf die Existenz der Zieldatei, benennt sie um 
wenn verfügbar, und löscht sie, wenn fertig.

Auf Schritt (2) kann man verzichten wenn der Reader die Zieldatei für 
jeden Zyklus nur einmal öffnet (die überschriebene/gelöschte Datei 
besteht weiterhin, solange der Handle offen ist) und es auch kein 
Problem ist die gleiche Datei mehrfach zu übertragen (wenn der Reader 
schneller als der Writer ist).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren