17Aug
Kad koristite Linux i OS X, operacijski sustav neće vas spriječiti da izbrišete datoteku koja je trenutno u upotrebi, 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šnje pitanje &Sesija odgovora nam dolazi zahvaljujući SuperUseru - podjele Stack Exchange, grupiranjem zajednice Q & A web stranica.
Pitanje
SuperUser čitač the.midget želi znati zašto Linux i Windows tretiraju datoteke u uporabi drugačije:
Jedna od stvari koja me je zbunjivala od početka korištenja Linuxa jest činjenica da vam to omogućuje promjenu nazivadatoteku 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?
Odgovori
SuperUser doprinose osvijetliti situaciju za.midget. Zaprepašteni piše:
Kad god otvorite ili izvršite datoteku u sustavu Windows, Windows zaključava datoteku na mjestu( to je pojednostavljenje, ali obično vrijedi). Datoteka koju zaključava proces ne može se izbrisati sve dok taj proces ne objavi. 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, operacijski 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 razlikom, 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 proširuje se na ideju i ističe kako stvari trebaju biti idealno i kako su u praksi:
Windows zadane postavke automatskog, obveznog zaključavanja 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 funkcionirati, 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 ovdje se 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 obvezatno, otpuštanje koje dopušta proturječnu operaciju bit će odbijeno, čak i ako kôd nikad nije namjeravao izvršiti proturječnu operaciju, već je samo otvaranje datoteke za drugu svrhu.
Dakle, ako kod koristi C / C ++ API ili koristi izvorni API bez posebnog razmišljanja o tim pitanjima, oni će završiti sprečavanjem maksimalnog broja mogućih operacija za svaku datoteku koju otvore i ne mogu otvoriti datoteku osim ako je mogućeoni bi mogli raditi na njemu kad se otvorio nepošteno.
Po mom mišljenju, Windows metoda će raditi puno bolje nego UNIX metoda, ako svaki program izabrao svoje dijeljenje načina i otvorene načine 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.
Tu ga imate: dva različita pristupa za upravljanje 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.