17Aug

Kodėl negaliu keisti naudojamų failų "Windows" sistemoje, kaip aš galiu "Linux" ir "OS X"?


Kai naudojate "Linux" ir "OS X", operacinė sistema neleis jums ištrinti šiuo metu naudojamo failo sistemoje "Windows", todėl jums bus aiškiai draudžiama tai padaryti. Kas duoda? Kodėl galite redaguoti ir ištrinti naudojamus failus iš "Unix" sistemose, bet ne "Windows"?

Šiandienos klausimas &Atsakymų sesija ateina pas mus iš "SuperUser" - "Stack Exchange", bendruomenės pagrįstos "Q & A" svetainių grupės, padalijimo.

Klausimas

SuperUser skaitytuvas the. Midget nori sužinoti, kodėl Linux ir Windows tvarko naudojamus failus skirtingai:

Vienas iš dalykų, kuris mane gąsdino nuo tada, kai aš pradėjau naudoti Linux, yra tai, kad jis leidžia jums pakeisti pavadinimąfailą arba net jį ištrinti, kol jis skaitomas. Pavyzdys yra tai, kaip aš netyčia bandiau ištrinti vaizdo įrašą, kai jis groja. Man pavyko ir buvo nustebęs, nes sužinojau, kad galite keisti tik ką nors iš failo be rūpesčių, ar jis šiuo metu naudojamas, ar ne.

Taigi, kas atsitinka už scenų ir neleidžia jam netyčia ištrinti dalykų "Windows", kaip jis gali "Linux"?

"Answer"

"SuperUser" autoriai atnešė šiek tiek informacijos apie "midget" padėtį."Amazed" rašo: "

" Kai atidarote arba paleidžiate failą "Windows" sistemoje, "Windows" fiksuoja failą vietoje( tai supaprastinimas, bet paprastai tai tiesa). Failas, kurį užfiksuoja procesas, negali būti ištrintas, kol šis procesas neatleidžia jo.Štai kodėl kiekvieną kartą, kai "Windows" turi atnaujinti save, reikia iš naujo paleisti jį, kad jis įsigaliotų.

Kita vertus, "Unix" tipo operacinės sistemos, tokios kaip "Linux" ir "Mac OS X", neužblokuoja failo, o pagrindinių disko sekų.Tai gali atrodyti triviali diferencijavimas, bet tai reiškia, kad failų sistemos failų sistemos turinys gali būti ištrintas, netrukdant bet kuriai programai, kurios failas jau yra atidarytas. Taigi, jūs galite ištrinti failą, kol jis vis dar vykdomas arba kitaip naudojamas, ir jis bus ir toliau diske, jei tam tikras procesas turi atvirą rankenėlę, nors jo įrašas į failų lentelę netenka.

David Schwartz išplečia idėją ir atkreipia dėmesį į tai, kaip viskas turėtų būti idealiai ir kaip jie yra praktikoje: pagal

Windows numatytasis automatinis, privalomas failų užblokavimas. UNIXs pagal numatytuosius nustatymus rankiniu būdu, bendradarbiauja failų užraktas. Abiem atvejais numatytieji įvykiai gali būti perbraukti, tačiau abiem atvejais jie paprastai nėra.

Daug senojo "Windows" kodo naudoja C / C ++ API( funkcijos kaip fopen), o ne gimtoji API( funkcijos, pavyzdžiui, CreateFile).C / C ++ API neleidžia nurodyti, kaip privaloma užrakto funkcija, taigi jūs gaunate numatytuosius nustatymus. Numatytasis "bendrinimo režimas" linkęs uždrausti "prieštaringas" operacijas. Jei atidarote failą rašymui, manoma, kad įrašai yra konfliktai, net jei jūs niekada rašote failą.Tas pats, kad pervardyti.

Ir čia yra blogiau. Išskyrus atidarymą skaitymui ar rašymui, C / C ++ API neleidžia nurodyti, ką ketinate daryti su failu. Taigi API turi laikyti, kad ketinate atlikti bet kokią teisinę operaciją.Kadangi užrakinimas yra privalomas, atvira, leidžianti nesuderinamą operaciją atsisakyti, net jei kodas niekada nesiekė atlikti prieštaringą operaciją, bet buvo tiesiog atidarytas failas kitam tikslui.

. Taigi, jei kodas naudoja C / C ++ API arba naudoja vietinį API, konkrečiai nesusijęs su šiais klausimais, jie bus užkirsti kelią maksimaliam galimų operacijų kiekvienam failui, kurį jie atidarys, ir negalės atidaryti failo, nebent kiekviena galimybėjie gali atlikti ant jo, kai atidarytas, yra nesuderintas.

Mano nuomone, "Windows" metodas veiktų gerokai geriau nei UNIX metodas, jei kiekviena programa pasirinko savo bendrinimo režimus ir atvirus režimus protingai ir gerai elgėsi su nesėkmių atvejais. Tačiau UNIX metodas veikia geriau, jei kodas nesijaudina galvoti apie šiuos klausimus. Deja, pagrindinis C / C ++ API netinkamai žemėlapiuojamas į "Windows" failų API tokiu būdu, kuris tvarko bendrinimo režimus, o atvirkščiai atsidaro. Taigi grynasis rezultatas yra šiek tiek purvinas.

Turite tai: du skirtingi požiūriai į failų tvarkymą du skirtingus rezultatus.

Ar ką nors įtraukti į paaiškinimą?Garsas išjungtas komentaruose. Norite skaityti daugiau atsakymų iš kitų "Tech-savvy Stack Exchange" vartotojų?Patikrinkite visą diskusijų temą čia.