Forum: PC-Programmierung korrupte Bilddaten durch Mehrfachzugriff


von Johnny (Gast)


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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das Uploadskript sollte die Datei unter anderem Namen speichern und erst 
nach erfolgtem (langsamen) Upload umbenennen.

von Felix Adam (Gast)


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.

von Mikro 7. (mikro77)


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).

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.