timestamp fehlerhaft mit oplocks?
verwende cifs, Zugriff von einer XP Workstation im DOS-Fenster per Samba auf die ReadyNAS NV+, oplocks = 1 (od. fake oplocks = 1)
Die Datei wird lesend und schreibend geöffnet.
alte qb4.5 Programme, die so bezüglich der Aktualisierung des Zeitstempels nicht mehr funktionieren:
Variante A funktioniert nur, wenn die Datei max. 236 Byte groß ist, ab 237 Byte bleibt der Zeitstempel unverändert, obwohl sich der Dateiinhalt ändert!
D. h. mit oplocks wird nicht richtig synchronisiert bzw. die Synchronisation ist irgendwie von der Größe der Datei bzw. der Variablenpuffer abhängig.
prinzipieller Ablauf:
Variante A)
OPEN "nummer1" FOR RANDOM AS 1 LEN = 118 ' Datei read write für Direktzugriff öffnen
FIELD 1, 6 AS nummer$ 'Platz für string-Variable in Direktzugriffs-Dateipuffer zuweisen
LOCK 1, 1 ' Satz sperren
GET 1, 1 'Satz holen - field-Variable erhält Dateiinhalt des 1. Satzes, Stelle 1-6
LSET nummer$ = "123456" 'Variable neu belegen
PUT 1, 1 'Variable in Datei zurückschreiben
UNLOCK 1, 1 'Satz entsperren
CLOSE 1 'Datei schließen
end
Variante B)
Zeitstempel wird weder mit noch ohne oplocks aktualisiert!!!
so wird der Zeitstempel auch nicht geändert
DIM x AS STRING * 944 'variable als string-Variable vordefinieren
OPEN "p:\programm\nummer1.tst" FOR RANDOM AS 1 LEN = 944 '' Datei read write für Direktzugriff öffnen
LOCK 1 'sperren Datei
GET 1, 1, x 'Variable mit Dateiinhalt füllen
x = "123456" + MID$(x, 7) 'oder nur x="123456"
PUT 1, 1, x 'Variable in Datei zurückschreiben
UNLOCK 1 ' Datei entsperren
CLOSE 1 'Datei schließen
END
Variante C)
so wird der Zeitstempel auch mit oplocks aktualisiert:
DIM x AS STRING * 236 '** (oder kleiner) **
OPEN "p:\programm\nummer1.tst" FOR RANDOM AS 1 LEN = 236
LOCK 1
GET 1, 1, x
x = "999999" + MID$(x, 7) 'oder nur x="999999"
PUT 1, 1, x
UNLOCK 1
CLOSE 1
END
FAZIT:
Nur wenn die Datei maximal 236 byte groß ist bzw. die Variablenlänge maximal 236 Byte groß ist wird der Zeitstempel aktualisiert, wird richtig synchronisiert, wenn (fake) oplock = 1 gesetzt ist.
Ist das nicht sehr merkwürdig und kann das jemand nachprüfen?
Hat noch jemand Qbasic(oder QB4.5) zur Verfügung und kann meinen Code auf der ReadyNAS testen?
Muss nämlich noch alte Programme betreuen und da stecken fast 1 MIO Zeilen Code dahinter, die will ich nicht alle durchforsten und umschreiben müssen.