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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.