Erweiterte Schreibrechte

Sie haben bereits gelernt wie Sie in MATLAB Dateien öffnen und lesend/schreibend zugreifen. Beim verteilten Arbeiten mit Dateien auf einem Dateisystem entsteht die Problematik gleichzeitiger Lese-/Schreibzugriffe. Dies kann zu Inkonsistenzen führen.

Stellen Sie sich z.B. die Frage, was passiert, wenn Benutzer "A" eine XML-Datei ausliest, die gerade durch Benutzer "B" in Bearbeitung ist. Was passiert z.B., wenn Benutzer "B" das abschließende Wurzelelement noch nicht geschlossen hat? Richtig, das XML-Dokument ist nicht wohlgeformt!

Um solche gleichzeitigen Schreib- und Lesezugriffe zu verhindern, gibt es verschiedene Mechanismen. Nachfolgend wird das Konzept von ".lock"-Dateien vorgestellt.

 

Konzept

Um alleinigen Lese-/Schreib-Zugriff auf eine Datei (existent oder nicht existent) zu erhalten, wird eine spezielle "Bearbeitungsdatei" (".lock"-Datei) erstellt. Diese temporäre Bearbeitungsdatei existiert solange, wie an der eigentlichen Datei gearbeitet wird. Danach wird die Datei wieder gelöscht und die eigentliche Datei zur Bearbeitung freigegeben. Andere Zugreifer sehen diese spezielle Datei und warten bis der Zugriff wieder freigegeben wird.

 

Vorgang:

  1. Zuerst wir die Bearbeitungsdatei erstellt (z.B. durch Öffnen). Gebräuchlich ist die Nutzung des eigentlichen Dateinamens an den die Endung ".lock" angehängt wird.
  2. Öffnen der eigentlichen Datei
  3. Bearbeiten (Lesen / Schreiben) der Datei.
  4. Schließen der Datei.
  5. Löschen der Bearbeitungsdatei (auch diese muss vorher geschlossen werden).

Ein anderes Programm wartet nun solange bis die "Bearbeitungsdatei" wieder entfernt wird. Dazu wird z.B. alle 0.1 Sekunden auf die Existenz der Datei geprüft.

 

Probleme:

  • Leider ist das Konzept nicht optimal. Verwendet ein anderes Programm eine andere Vorgehensweise kann die Datei trotz "Bearbeitungsdatei" bearbeitet werden.
  • Bricht das "bearbeitende" Programm ab, ohne die "Bearbeitungsdatei" zu entfernen, so bleibt die Datei gesperrt und andere Programme halten unter Umständen an.
  • Es gibt keine "Warteschlange". Wenn mehrere Dateien auf eine Datei zugreifen wollen und warten müssen, wird willkürlich ein Programm den Zugriff erhalten.

 

function fline = readViaInternet(filename)
% (C) 2012, Datenverarbeitung in der Konstruktion, TU Darmstadt

% Author:   André Picard

% Date:     22.11.2012
% Version:  1.0
%

% Check parameter

if nargin < 1
error('de:tudarmstadt:dik:vitmes', 'Not enough input parameters!');
end

%% Wait for other lock process
if exist([filename, '.lock'], 'file') ~= 0
disp(['Waiting for file "' filename '".']);
end
while exist([filename, '.lock'], 'file')
pause(0.01);
end

%% Read text from file
lock = fopen([filename, '.lock'], 'w');
fclose(lock);

fid = fopen(filename, 'r');
fline = {};
while(~feof(fid))
fline{end+1} = fgetl(fid);
end
fclose(fid);

delete([filename, '.lock']);
end