Kada koristite Linux i OS X, operacijski sustav neće vas spriječiti da izbrišete datoteku koja je trenutno u uporabi, ali na Windowsu izričito ćete biti zabranjeni. Što daje? Zašto možete uređivati i brisati datoteke u uporabi na Unix-izvedenim sustavima, ali ne i za Windows?
Današnja pitanja i odgovori nam se javljaju zahvaljujući SuperUseru - podjele Stack Exchange-a, zajednice-driven grupiranja Q & A web stranica.
Čitač SuperUser the.midget želi znati zašto Linux i Windows različito upravljaju datotekom u upotrebi:
Jedna od stvari koja mi je zbunila otkako sam počela koristiti Linux jest činjenica da vam to omogućuje promjenu naziva datoteke ili čak izbrisati dok se čita. Primjer je kako sam slučajno pokušao izbrisati videozapis tijekom reprodukcije. Uspio sam i bio sam iznenađen dok sam naučio da se možete mijenjati gotovo sve u datoteci bez brige ako se trenutno koristi ili ne.
Dakle, što se događa iza scene i spriječiti ga da bezobzirno brisanje stvari u sustavu Windows kao što je on u Linuxu?
Dobavljači SuperUser-a rasvijetlili su situaciju za midi. Zaprepašteni piše:
Kad god otvorite ili izvršite datoteku u sustavu Windows, Windows zaključava datoteku na mjestu (ovo je pojednostavljenje, ali obično vrijedi). Datoteka koja je zaključana procesom ne može se izbrisati sve dok taj proces ne otpušta. To je razlog zašto svaki put kada se Windows mora ažurirati, trebate ponovno pokrenuti sustav kako bi bio na snazi.
S druge strane, operativni sustavi slični Unixu, kao što su Linux i Mac OS X, ne zaključavaju datoteku, nego temeljne diskove. To se može činiti trivijalnom diferencijacijom, ali to znači da se zapis datoteke u datoteci datotečnog sustava može izbrisati bez uznemiravanja bilo kojeg programa koji već ima otvorenu datoteku. Tako možete izbrisati datoteku dok je još uvijek izvršavana ili na drugi način upotrebljavana i nastavit će postojati na disku sve dok neki proces ima otvorenu ručicu za njega iako je njegov unos u tablicu datoteka nestalo.
David Schwartz se širi idejom i ističe kako bi stvari trebale biti idealno i kako su u praksi:
Windows zadane postavke automatski, obvezno zaključavanje datoteka. UNIXes je zadano za ručno, kooperativno zaključavanje datoteka. U oba slučaja, zadane postavke mogu se nadjačati, ali u oba slučaja obično nisu.
Puno starog Windows koda koristi C / C ++ API (funkcije kao što je fopen), a ne izvorni API (funkcije kao što je CreateFile). C / C ++ API vam daje nikakav način da odredite kako će obavezno zaključavanje raditi, pa ćete dobiti zadane postavke. Zadani način "dijeljenja" obično zabranjuje "sukobljene" operacije. Ako otvorite datoteku za pisanje, piše se pretpostavlja da će se sukobljavati, čak i ako nikada zapravo ne pišete datoteku. Isto vrijedi za preimenovanje.
I, evo gdje se to pogoršava. Osim otvaranja za čitanje ili pisanje, C / C ++ API ne nudi način da odredite što namjeravate učiniti s datotekom. Zato API mora pretpostaviti da ćete obavljati bilo kakvu pravnu operaciju. Budući da je zaključavanje obvezno, otvori koji omogućuju sukobljenu operaciju bit će odbijeni, čak i ako kôd nikada nije namjeravao izvršiti proturječnu operaciju, već je samo otvaranje datoteke za drugu svrhu.
Dakle, ako kôd koristi C / C + + API ili koristi izvorni API bez posebnog razmišljanja o tim problemima, završit će sprečavanje maksimalnog broja mogućih operacija za svaku datoteku koju otvaraju i ne mogu otvoriti datoteku osim ako je moguće mogla nastupiti na njemu kada je otvorena neuobičajena.
Po mom mišljenju, metoda Windows će raditi mnogo bolje od UNIX metode, ako svaki program odabere svoje načine dijeljenja i otvorenih načina mudro i zvučno rješava slučajeve neuspjeha. UNIX metoda, međutim, bolje funkcionira ako kôd ne smeta razmišljati o tim pitanjima. Nažalost, osnovni C / C ++ API ne mapira dobro na Windows datoteku API na način koji obrađuje način dijeljenja i proturječne dobro otvara. Tako je neto rezultat malo neuredan.
Tamo ga imate: dva različita pristupa postupanju s datotekama daju dva različita rezultata.
Imate li nešto za objašnjenje? Zvuči u komentarima. Želite li pročitati više odgovora od drugih tehnoloških korisnika Stack Exchangea? Pogledajte ovdje cijelu raspravu.