Koduleht » kuidas » Miks ma ei saa Windowsis kasutatavaid faile muuta nagu Linux ja OS X?

    Miks ma ei saa Windowsis kasutatavaid faile muuta nagu Linux ja OS X?


    Kui kasutate Linuxi ja OS X-i, siis ei takista operatsioonisüsteem teid praegu kasutuses oleva Windowsi faili kustutamisel, sest teil on selgesõnaliselt keelatud. Mis annab? Miks saate Unixist tuletatud süsteemides kasutatavaid faile redigeerida ja kustutada, kuid mitte Windowsi?

    Tänane küsimuste ja vastuste seanss saabub meiega kohtades, kus on SuperUser-Stack Exchange'i alajaotis, kogukondlikult juhitav Q&A veebisaitide rühmitus.

    Küsimus

    SuperUser lugeja the.midget soovib teada, miks Linux ja Windows ravimeid kasutavad failid erinevalt kohtlevad:

    Üks asi, mis on mind hämmastanud, sest ma alustasin Linuxi kasutamist, on see, et see võimaldab teil faili nime muuta või isegi selle lugemise ajal kustutada. Näiteks on see, kuidas ma kogemata üritasin video esitamise ajal videot kustutada. Mul õnnestus ja olin üllatunud, kui sain teada, et saate failis peaaegu midagi muuta ilma hoolitsuseta, kui seda praegu kasutatakse või mitte.

    Niisiis, mis toimub kulisside taga ja takistab teda tahtmatult Windowsi asjade kustutamisel nagu ta saab Linuxis?

    Vastus

    SuperUser-i toetajad valgustasid olukorda. Hämmastas kirjutab:

    Kui te Windowsis faili avate või käivitate, lukustab Windows faili (see on lihtsustamine, kuid tavaliselt õige.) Protsessi poolt lukustatud faili ei saa kustutada enne, kui see protsess seda vabastab. Sellepärast, kui Windows peab ennast värskendama, vajate selle jõustumiseks taaskäivitamist.

    Teisest küljest, Unixi sarnased operatsioonisüsteemid, nagu Linux ja Mac OS X, ei lukusta faili, vaid selle aluseks olevad ketasektorid. See võib tunduda triviaalne diferentseerimine, kuid see tähendab, et faili salvestust failisüsteemi sisukorda saab kustutada, häirimata ühtegi programmi, millel on juba fail avatud. Nii saate faili kustutada, kui see ikka veel töötab või on muul moel kasutusel, ning see jätkub kettal nii kaua, kui mõnel protsessil on avatud käepide, kuigi selle kirje failitabelis on kadunud.

    David Schwartz laiendab ideed ja toob esile, kuidas asjad peaksid olema ideaalsed ja kuidas need on praktikas:

    Windows vaikimisi on automaatne kohustuslik faililukk. UNIXes vaikimisi käsitsi, koostöös olevate failide lukustamine. Mõlemal juhul võib vaikeväärtused ületada, kuid mõlemal juhul ei ole need tavaliselt.

    Paljud vanad Windowsi koodid kasutavad pigem C / C ++ API-d (funktsioone nagu fopen) kui natiivset API-d (funktsioone nagu CreateFile). C / C + + API ei anna teile mingit võimalust määrata kindlaks, kuidas kohustuslik lukustamine toimib, nii saad vaikimisi. Vaikimisi “jagamisrežiim” kaldub keelama „vastuolulisi” toiminguid. Kui avate faili kirjutamiseks, siis eeldatakse, et kirjutatakse vastuolus, isegi kui te ei kirjuta kunagi failile. Liiguta ümbernimetamiseks.

    Ja siin on see, kus see halveneb. Muud kui lugemise või kirjutamise avamine, ei anna C / C + + API mingit võimalust määrata, mida te failiga teha kavatsete. Seega peab API eeldama, et kavatsete teostada mis tahes juriidilist toimingut. Kuna lukustamine on kohustuslik, keeldutakse avatud, mis võimaldab vastuolulist operatsiooni, isegi kui kood ei ole kunagi ette nähtud vastuolulise toimingu teostamiseks, vaid avas faili lihtsalt muuks otstarbeks.

    Seega, kui kood kasutab C / C + + API-d või kasutab natiivset API-d ilma nende probleemide konkreetset mõtlemist, lõpetavad nad võimalike toimingute maksimaalse hulga avamise iga faili jaoks, mida nad avavad, ja ei suuda faili avada, välja arvatud juhul, kui kõik võimalikud toimingud on see avaneb, kui see on avatud.

    Minu arvates toimiks Windowsi meetod palju paremini kui UNIX-i meetod, kui iga programm valis oma jagamisrežiimid ja avatud režiimid targalt ja arukalt käsitletud rikke korral. UNIX-i meetod töötab siiski paremini, kui kood ei vaevu neid küsimusi mõelda. Kahjuks ei kaardita C / C + + põhi API hästi Windowsi faili API-le viisil, mis tegeleb jagamisrežiimidega ja vastuolulised avanevad hästi. Seega on tulemuseks natuke räpane.

    Siin on see: kaks erinevat lähenemist failide käsitlemisele annavad kaks erinevat tulemust.


    Kas teil on midagi lisada selgitusele? Hääletage kommentaarides. Kas soovite lugeda rohkem vastuseid teistelt tech-savvy Stack Exchange'i kasutajatelt? Vaadake siin täielikku arutelu lõiku.