Lista pecet@man.lodz.pl
[Lista archiwów] [Inne Listy]

Re: [PECET] jeden plik na dwóch komputerach

To: pecet@man.lodz.pl
Subject: Re: [PECET] jeden plik na dwóch komputerach
From: Robert Winkler <noone@nowhere.org>
Date: Fri, 31 Oct 2014 13:12:32 +0100
W dniu 2014-10-31 o 11:22, R.e.m.e.K pisze:
Dnia Fri, 31 Oct 2014 10:11:11 +0100, Kamil napisał(a):

Obsługa bazy danych na Windows to nieporozumienie.

Accessa czy kazdej bazy?


Dotyczy jakiegokolwiek pliku do którego dostajesz się zdalnie.
Nie ważne czy odwołujesz się przez \\server\shared_folder\file.db
czy też najpierw zamapujesz \\server\shared_folder\ jako dysk u siebie
i poprzez zamapowany dysk odwołujesz się do niego.

Wszystko było dobrze w Windows 3.11 for Workgroup,
w Windows 95, 98, NT4, 2000 czy też XP.

CreateFile, ReadFile, GetWindowText to funkcje WinAPI
CreateFile, ReadFile pracują na uchwycie pliku, dla nich nie jest ważne
czy plik znajduje się lokalnie, czy zdalnie, zawsze działają tak samo.
Dopiero pod spodem, gdy jest to plik plik lokalny na dysku NTFS
zamieniane to jest na operacje NTFSa
czy jest to SCSI, system tłumaczy to na komendy SCSI,
gdy jest to plik zdalny do którego dostęp odbywa się przez WebDAV
zamieniane to jest na komendy HTTP
gdy jest to plik w sieci lokalnej zamieniane to jest na komendy SMB.
I tu jest właśnie problem, stare SMB posiadało funkcje zbliżone do tych
oferowanych przez dyski lokalne,
w SMB v2 wszystko to zostało usunięte i mamy tylko:
NEGOTIATE, SESSION_SETUP, LOGOFF, TREE_CONNECT,
TREE_DISCONNECT
CANCEL, CHANGE_NOTIFY, CLOSE, CREATE, FLUSH,
IOCTL, LOCK, QUERY_DIRECTORY, QUERY_INFO,
READ, SET_INFO, WRITE
ECHO, OPLOCK_BREAK

Nie ma już komendy SEEK, a był ona podstawową operacją
pozwalającą na poruszanie się wewnątrz pliku,
na pominięcie jego fragmentu i oczytanie tylko interesującej części.
Pracując z dyskiem lokalnym dysponujemy odpowiednikiem komendy SEEK,
dla dysków sieciowych za każdym razem gdy program używa seek
i próbuje odczytać lub zapisać kilka bajtów ze środka pliku
system musi to zasymulować przesyłając po sieci całość.
W końcu funkcja WinAPI SetFilePointer musi działać tak samo na każdym systemie
a że w Windows 7 wymaga to przesłania po sieci całego pliku... trudno.

/Robert


<Pop. w Wątku] Aktualny Wątek [Nast. w Wątku>