Kun käytät Linuxia ja OS X: tä, käyttöjärjestelmä ei estä sinua poistamasta tällä hetkellä käytössä olevaa tiedostoa Windowsissa, jolle estetään nimenomainen käyttö. Mikä antaa? Miksi voit muokata ja poistaa käytettyjä tiedostoja Unix-järjestelmissä, mutta ei Windowsia?
Tämän päivän kysymys- ja vastausistunto tulee meihin SuperUserin hyväksi - Stack Exchangein alaosasto, joka on yhteisöllinen Q & A-sivustojen ryhmittely.
SuperUser-lukija the.midget haluaa tietää, miksi Linux ja Windows käsittelevät käytössä olevia tiedostoja eri tavoin:
Yksi niistä asioista, jotka ovat ymmärtäneet minua siitä lähtien, kun aloin käyttää Linuxia, on se, että sen avulla voit muuttaa tiedoston nimeä tai jopa poistaa sen, kun sitä luetaan. Esimerkkinä on se, miten yritin vahingossa yrittää poistaa videon toiston aikana. Sain onnistuneen ja yllätyin, kun oppin, että voit vaihtaa lähes mitä tahansa tiedostosta huolimatta, jos sitä käytetään tällä hetkellä tai ei.
Joten mitä tapahtuu kulissien takana ja estää häntä poistamasta asioita Windowsissa, kuten hän voi Linuxissa?
SuperUser-avustajat antavat valolle tilannetta. Hämmästynyt kirjoittaa:
Aina kun avaat tai suoritat tiedoston Windowsissa, Windows lukitsee tiedoston paikoillaan (tämä on yksinkertaistaminen, mutta yleensä totta.) Tiedostoa, joka on lukittu prosessilla, ei voida poistaa, ennen kuin prosessi vapauttaa sen. Siksi aina, kun Windowsin on päivitettävä itse, tarvitset uudelleenkäynnistyksen, jotta se tulee voimaan.
Toisaalta Unixin kaltaiset käyttöjärjestelmät, kuten Linux ja Mac OS X, eivät lukitse tiedostoa, vaan taustalla olevat levytekijät. Tämä voi tuntua vähäpätöiseltä eriytyneeltä, mutta se tarkoittaa, että tiedostojärjestelmän tietue sisällytetiedostossa voidaan poistaa häiritsemättä mitä tahansa ohjelmaa, jolla tiedosto on jo auki. Joten voit poistaa tiedoston, kun se on vielä suorittamassa tai muulla tavoin käytössä ja se säilyy levylle niin kauan kuin jotkut prosessit käsittelevät avoimen kädensijan, vaikka sen tiedostopöydässä oleva tieto on poissa.
David Schwartz laajentaa ajatusta ja korostaa, miten asioiden pitäisi olla ihanteellisia ja miten ne ovat käytännössä:
Windows on automaattisesti automaattinen, pakollinen tiedostojen lukitus. UNIX-oletusarvo manuaaliseen, yhteistyöhön liittyvään tiedostojen lukitsemiseen. Kummassakin tapauksessa oletusasetuksia voidaan ohittaa, mutta molemmissa tapauksissa ne eivät tavallisesti ole.
Paljon vanhoja Windows-koodeja käytetään C / C ++ API: n (kuten fopen) sijaan alkuperäisen API: n sijasta (kuten CreateFile). C / C ++ -sovellusliittymällä ei ole mitään keinoa määrittää, miten pakollinen lukitus toimii, joten saat oletusarvot. Oletuksena on, että "jakamoodi" estää ristiriitaisia operaatioita. Jos avaat tiedoston kirjoittamista varten, kirjoitusten oletetaan olevan ristiriidassa, vaikka et koskaan todella kirjoittaa tiedostoon. Ditto renames.
Ja tässä se pahenee. C / C ++ -sovellusliittymällä ei ole mitään avaamista lukemista tai kirjoittamista varten, koska siinä ei ole mitään mahdollisuutta määrittää, mitä aiot tehdä tiedostolla. API: n on siis oletettava, että olet tekemässä mitään laillista toimintaa. Koska lukitseminen on pakollista, avoin, joka sallii ristiriitaisen operaation, evätään, vaikka koodi ei olisi koskaan aiottu suorittamaan ristiriitaista operaatiota, vaan avasi tiedoston vain toista tarkoitusta varten.
Joten jos koodi käyttää C / C ++ API: ta tai käyttää natiivia API ilman erityistä ajattelua näistä asioista, ne lopettavat estääkseen maksimaalisen joukon mahdollisia toimintoja jokaiselle avoimelle tiedostolleen, eivätkä pysty avaamaan tiedostoa, elleivät kaikki mahdolliset operaatiot voisi toimia sen jälkeen, kun avattu on ristiriidassa.
Mielestäni Windows-menetelmä toimisi paljon paremmin kuin UNIX-menetelmä, jos jokainen ohjelma valitsi jakamoodit ja avoimet toimintatavat järkevästi ja vakaasti käsiteltäessä epäonnistumisia. UNIX-menetelmä toimii kuitenkin paremmin, jos koodi ei vaivaudu pohtimaan näitä asioita. Valitettavasti perus C / C ++ API ei kartoittaa hyvin Windows-tiedosto-sovellusliittymää tavalla, joka käsittelee jakamoodit ja ristiriitaiset avautuvat hyvin. Niinpä nettotulos on vähän sotkuinen.
Siellä sinulla on: kaksi erilaista lähestymistapaa tiedostojen käsittelyyn tuottaa kaksi erilaista tulosta.
Onko jokin asia lisättävä selitykseen? Kuulkaa kommentit. Haluatko lukea lisää vastauksia muilta tech-tajuilta Stack Exchange-käyttäjiltä? Katso koko keskusteluketju täältä.