17Aug

Zakaj ne morem spremeniti datotek za uporabo v sistemu Windows, tako kot jaz v Linuxu in OS X?

click fraud protection


Ko uporabljate Linux in OS X, vam operacijski sistem ne bo preprečil, da bi izbrisali še trenutno datoteko v operacijskem sistemu Windows, zato vam to izrecno onemogočite. Kaj daje? Zakaj lahko urejate in brišete med uporabo datotek v sistemih, ki temeljijo na Unixu in niso Windows?

Današnje vprašanje &S sejo odgovora prihaja uporaba SuperUserja, ki je razdeljena na Stack Exchange, skupinsko spletno stran Q & A.

Vprašalnik

SuperUser bralnik the.midget želi vedeti, zakaj Linux in Windows obravnavata različne datoteke drugače:

Ena od stvari, ki me je zame začudila že od začetka uporabe Linuxa, je dejstvo, da vam omogoča spreminjanje imenadatoteko ali celo izbrišite med brati. Primer je, kako sem slučajno poskušal izbrisati videoposnetek med predvajanjem. Uspelo mi je, in bil sem presenečen, ko sem se naučil, da lahko spremenite skoraj vse v datoteko brez skrbi, če se trenutno uporablja ali ne.

Torej, kaj se dogaja v ozadju in mu preprečuje, da bi v Windows okusno izbrisal stvari, kot je v Linuxu?

instagram viewer

Odgovorni sodelavci

SuperUser so razkrili situacijo za the.midget. Amazed piše:

Kadarkoli odprete ali izvršite datoteko v operacijskem sistemu Windows, Windows zaklene datoteko( to je poenostavitev, a ponavadi velja.) Datoteke, ki je zaklenjena s procesom, ni mogoče izbrisati, dokler ga ta postopek ne izpusti. To je razlog, zakaj se mora Windows, ko se mora posodobiti, potreben ponovni zagon, da bi lahko začel veljati.

Po drugi strani Unix podobni operacijski sistemi, kot sta Linux in Mac OS X, ne blokirajo datoteke, temveč le osnovne sektorje diska. To se lahko zdi trivialna diferenciacija, toda pomeni, da je zapis datoteke v vsebinski datotečni sistem mogoče izbrisati, ne da bi pri tem motili vsak program, ki že vsebuje datoteko. Torej lahko datoteko izbrišete, medtem ko se še vedno izvaja ali kako drugače uporablja, in bo še naprej obstajal na disku, dokler ima nek proces odprt ročaj, čeprav je njen vnos v tabelo datotek ni več.

David Schwartz razširi idejo in poudarja, kako bi bilo idealno in kako so v praksi:

Windows privzeto nastavi na samodejno obvezno zaklepanje datotek. UNIXes je privzeto ročno, sodelovalno zaklepanje datotek. V obeh primerih lahko privzete vrednosti preglasite, vendar v obeh primerih ponavadi niso.

Veliko stare kode Windows uporablja API za C / C ++( funkcije, kot je fopen), namesto domačega API-ja( funkcije, kot je CreateFile).API-ja C / C + + ne omogoča, da določite, kako bo obvezno zaklepanje delovalo, zato boste dobili privzete nastavitve. Privzeti "način deljenja" običajno prepoveduje "nasprotujoče" operacije.Če odprete datoteko za pisanje, se predpostavlja, da se pišejo v konflikt, tudi če nikoli ne pišete v datoteko. Prav tako za preimenovanje.

In, tukaj je še slabše. Razen odpiranja za branje ali pisanje, API-ja C / C ++ ne določa, kaj nameravate storiti z datoteko. Torej API mora prevzeti, da boste opravljali kakršne koli pravne postopke. Ker je zaklepanje obvezno, bo odklon, ki dovoljuje nasprotujoče si delovanje, zavrnjen, tudi če koda nikoli ne namerava izvajati nasprotujoče si operacije, ampak je šele odpirala datoteko za drug namen.

Torej, če koda uporablja API C / C ++ ali uporablja domači API brez posebnega razmišljanja o teh težavah, bo prenehal preprečevati največji možni nabor operacij za vsako datoteko, ki jo odprejo, in ne more odpreti datoteke, razen če je vsaka možna operacijaki jih lahko izvajajo na njem, ko je odprt, je neokrnjen.

Po mojem mnenju bi operacija Windows delovala precej boljša od UNIX-ove metode, če bi vsak program izbral svoje načine deljenja in odprl modele pametno in varno obravnavo primerov napak. Metoda UNIX pa deluje bolje, če koda ne skrbi za te težave. Na žalost se osnovni API za C / C + + ne premakne v API-jem datoteke API-ja na način, ki obravnava načine deljenja in nasprotja se dobro odpre. Torej neto rezultat je nekoliko grdo.

Tukaj imate: dva različna pristopa k ravnanju s datotekami sta dva različna rezultata.

Ali želite dodati nekaj pojasnila? Zvok v komentarjih.Želite prebrati več odgovorov od drugih uporabniških članov stack Exchange? Oglejte si celotno temo za razpravo tukaj.