Početna » kako da » Zašto ne mogu mijenjati datoteke koje se koriste u sustavu Windows kao što mogu na Linuxu i OS X?

    Zašto ne mogu mijenjati datoteke koje se koriste u sustavu Windows kao što mogu na Linuxu i OS X?


    Kada koristite Linux i OS X, operativni sustav neće vas zaustaviti da izbrišete datoteku koja se trenutno koristi u sustavu Windows koju ćete izričito zabraniti. Što daje? Zašto možete uređivati ​​i brisati datoteke u upotrebi na Unix-izvedenim sustavima, ali ne i u sustavu Windows?

    Današnja sesija pitanja i odgovora dolazi nam ljubaznošću SuperUser-a, podjele Stack Exchangea, grupiranja web-lokacija za pitanja i odgovore u zajednici.

    Pitanje

    Čitač SuperUser the.midget želi znati zašto Linux i Windows različito tretiraju datoteke koje se koriste:

    Jedna od stvari koja me je zbunila otkako sam počeo koristiti Linux je činjenica da vam omogućuje da promijenite ime datoteke ili je čak izbrišete dok se čita. Primjer je kako sam slučajno pokušao izbrisati videozapis dok je bio u igri. Uspio sam, i bio sam iznenađen kad sam saznao da možete promijeniti bilo što u datoteci bez brige ako se trenutno koristi ili ne.

    Dakle, ono što se događa iza kulisa i sprječava ga da bezobzirno briše stvari u sustavu Windows kao što može u Linuxu?

    Odgovor

    Suradnici SuperUser-a bacaju malo svjetla na situaciju za. Zapanjeni piše:

    Kad god otvorite ili izvršite datoteku u sustavu Windows, Windows zaključava datoteku na mjestu (ovo je pojednostavljenje, ali obično je to točno.) Datoteka koja je zaključana procesom ne može se izbrisati dok je taj proces ne oslobodi. To je razlog zašto, kad god se sustav Windows mora ažurirati, potrebno je ponovno podizanje sustava kako bi on stupio na snagu.

    S druge strane, operativni sustavi slični Unixu kao što su Linux i Mac OS X ne zaključavaju datoteku, već temeljne disk sektore. To se može činiti trivijalnim razlikovanjem, ali to znači da se zapis datoteke u tablici sadržaja može izbrisati bez ometanja bilo kojeg programa koji već ima otvorenu datoteku. Tako možete izbrisati datoteku dok se ona još izvodi ili se na drugi način koristi, a ona će i dalje postojati na disku sve dok neki proces ima otvorenu ručku za nju, iako je njezin unos u tablici datoteka nestao..

    David Schwartz širi ideju i naglašava kako stvari trebaju biti idealne i kako su u praksi:

    Windows se automatski postavlja na automatsko, obvezno zaključavanje datoteka. UNIX-i zadani su za ručno, zadružno zaključavanje datoteka. U oba slučaja, zadane postavke se mogu nadjačati, ali u oba slučaja obično nisu.

    Puno starog Windows koda koristi C / C ++ API (funkcije poput fopen), a ne izvorni API (funkcije kao što je CreateFile). C / C + + API vam ne daje mogućnost da odredite kako će obavezno zaključavanje funkcionirati, tako da ćete dobiti zadane postavke. Zadani "način dijeljenja" teži zabrani "sukobljenih" operacija. Ako otvorite datoteku za pisanje, pretpostavlja se da se piše u konfliktu, čak i ako zapravo nikada ne pišete u datoteku. Isto vrijedi i za preimenovanja.

    I ovdje se pogoršava. Osim otvaranja za čitanje ili pisanje, C / C + + API ne pruža mogućnost da odredite što namjeravate učiniti s datotekom. Dakle, API mora pretpostaviti da ćete izvršiti bilo koju pravnu operaciju. Budući da je zaključavanje obvezno, otvoreno koje dopušta operaciju u sukobu bit će odbijeno, čak i ako kôd nije imao namjeru izvesti konfliktnu operaciju, već je samo otvarao datoteku za drugu svrhu.

    Dakle, ako kod koristi C / C ++ API, ili koristi izvorni API bez posebnog razmišljanja o tim problemima, oni će zaustaviti maksimalni skup mogućih operacija za svaku datoteku koju otvaraju i ne mogu otvoriti datoteku osim ako svaka moguća operacija kada bi se otvorio neusklađen.

    Po mom mišljenju, Windows metoda bi radila puno bolje od UNIX metode ako bi svaki program izabrao modove dijeljenja i otvorene modove mudro i zdravo rješavao slučajeve kvara. Međutim, UNIX metoda radi bolje ako kod ne smeta razmišljanje o tim pitanjima. Nažalost, osnovni C / C ++ API ne mapira se dobro na API datoteku sustava Windows na način koji upravlja načinima dijeljenja i dobro se otvara sukob. Tako je neto rezultat malo neuredan.

    Tu imate: dva različita pristupa rukovanju datotekama daju dva različita rezultata.


    Imate li što dodati objašnjenju? Zvuk isključen u komentarima. Želite li pročitati više odgovora od drugih tehničkih korisnika Stack Exchangea? Pogledajte cjelokupnu temu za raspravu ovdje.