17Aug
Kui kasutate Linuxi ja OS X-d, siis ei takista see operatsioonisüsteem Windowsi praegu praegu kasutusel oleva faili kustutamist, kui teil seda selgesõnaliselt keelata. Mis annab? Miks saab Unixist tuletatud süsteemidest, kuid mitte Windowsis kasutatavaid faile muuta ja kustutada?
Tänane küsimus &Vastuste seanss tuleb meile viisakalt SuperUseriga - Q & A veebisaitide kogukonnapõhise grupi Stack Exchange jagunemisest.
Küsimus
SuperUser lugeja the.midget tahab teada, miks Linux ja Windows käsitlevad kasutusel olevaid faile erinevalt:
Üks asi, mis on mulle hämmingus alates sellest, kui hakkasin Linuxi kasutama, on asjaolu, et see võimaldab teil muuta nimefaili või isegi selle kustutamisel selle lugemise ajal. Näiteks on see, kuidas ma kogemata üritasin videot mängimise ajal kustutada. Mul õnnestus ja oli üllatunud, sest ma sain teada, et saate muuta faili kohta midagi, ilma et oleks vaja teada, kas seda praegu kasutatakse või mitte.
Niisiis, mis toimub stseenide taga ja takistab tal Windowsi asjadest eemaldamist, nagu ta suudab Linuxis?
Vastused
SuperUseri kaastöötajatele andsid mõningase valguse matemaatilise olukorra kohta. Amazinged kirjutab:
Kui avate või käivate faili Windowsis, lukustab Windows faili oma asukohas( see on lihtsustamine, kuid tavaliselt tõsi). Faili, mis on protsessi lukustatud, ei saa kustutada, kuni see protsess selle vabastab. Sellepärast peab alati, kui Windows peab ise oma värskendama, reboot, et see jõustuks.
Teisest küljest ei luba Unix-tüüpi operatsioonisüsteemid, nagu Linux ja Mac OS X, lüüa faili, vaid pigem aluseks olevaid kettaseadmeid. See võib tunduda tühine diferentseerimine, kuid see tähendab, et failisüsteemi sisukorda saab faili salvestada, ilma et see häiriks ühtegi programmi, millel juba on fail avatud. Nii saate faili kustutada, kui see on ikka veel käivitatav või muul viisil kasutusel, ja see jätkub kettale olemasoluks, kui mõnel protsessil on avatud käepide, kuigi selle faili lahtrisse sisenemine on kadunud.
David Schwartz laiendab ideed ja tõstab esile, kuidas asjad peaksid olema ideaalsed ja kuidas nad praktikas toimivad:
Windows vaikimisi automaatne, kohustuslik failide lukustamine. UNIXES vaikimisi käsitsi, ühistoodangu faili lukustamiseks. Mõlemal juhul saab vaikeväärtusi üle kanda, kuid mõlemal juhul ei ole need tavaliselt olemas.
Paljud vanad Windowsi koodid kasutavad pigem C / C ++ API( funktsioone nagu fopen) kui kohalikku API-d( funktsioonid nagu CreateFile).C / C ++ API ei anna teile võimalust määrata, kuidas kohustuslik lukustamine toimib, nii et saate vaikeseadeid. Vaikimisi "jagamise režiim" kipub keelama "vastuolulised" toimingud. Kui avate kirjutatava faili, eeldatakse, et kirjutamine on vastuolus isegi siis, kui te ei kirjuta faili kunagi. Samas ümbernimetamiseks.
Ja siin on olukord halvenenud. Muu kui avamine lugemiseks või kirjutamiseks, C / C ++ API ei võimalda täpsustada, mida kavatsete failiga teha. Seega peab API eeldama, et kavatsete teha mis tahes juriidilist toimingut. Kuna lukustamine on kohustuslik, ei anta vastuolulise toimingu lubamiseks avatud, isegi kui koodi pole kunagi ette nähtud konflikti toimingu tegemiseks, vaid oli faili avamine muul otstarbel.
. Seega, kui kood kasutab C / C ++ API-d või kasutab natiivset API-d ilma nende probleemide konkreetselt mõtlemata, siis need lõpetavad võimaliku operatsioonide maksimaalse kogumi vältimise iga faili avamisel ja faili avamisel, kui kõik võimalikud toimingudnad võiksid seda teha, kui see avaneb, pole takistuseks.
Minu arvates toimiks Windowsi meetod palju paremini kui UNIX-meetod, kui kõik programmid valisid oma jagamisrežiimid ja avatud režiimid targalt ja hoolikalt käsitseda rikkejuhtumeid. UNIX-i meetod toimib paremini, kui koodi ei huvita neid probleeme mõelda. Kahjuks ei leia C / C ++ API põhi kaarti Windowsi faili API-le hästi viisil, mis käitleb ühiskasutusrežiime ja sobib hästi vastuollu. Nii et neto tulemus on natuke räpane.
Seal on see: failide käsitsemise kaks erinevat lähenemist saavad kaks erinevat tulemust.
Kas teil on seletamiseks midagi lisada? Helistage kommentaarides. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Tutvu täieliku arutelu teemaga siit.