Pagrindinis » kaip » Kodėl negaliu keisti „Windows“ naudojamų failų kaip „Linux“ ir OS X?

    Kodėl negaliu keisti „Windows“ naudojamų failų kaip „Linux“ ir OS X?


    Kai naudojate „Linux“ ir „OS X“, operacinė sistema neleis jums ištrinti šiuo metu naudojamo failo sistemoje „Windows“. Kas suteikia? Kodėl galite redaguoti ir ištrinti naudojamus failus „Unix“ sistemose, bet ne „Windows“?

    Šiandienos „Klausimų ir atsakymų“ sesija mums suteikiama pagal „SuperUser“ - „Stack Exchange“ padalinį, bendruomenės sukurtą „Q&A“ svetainių grupavimą.

    Klausimas

    „SuperUser“ skaitytuvas the.midget nori sužinoti, kodėl „Linux“ ir „Windows“ skirtingai apdoroja naudojamus failus:

    Vienas iš dalykų, kurie mane supainiojo nuo to laiko, kai pradėjau naudoti „Linux“, yra tai, kad jis leidžia keisti failo pavadinimą arba netgi jį ištrinti, kol jis skaitomas. Pavyzdys yra tai, kaip aš netyčia bandžiau ištrinti vaizdo įrašą, kai jis grojo. Man pavyko, ir buvau nustebęs, kai sužinojau, kad galite nieko pakeisti faile be rūpestingumo, jei jis šiuo metu naudojamas ar ne.

    Taigi, kas vyksta užkulisiuose ir neleidžia jam netyčia ištrinti daiktų Windows sistemoje, kaip jis gali Linux sistemoje?

    Atsakymas

    „SuperUser“ dalyviai šiek tiek apžvelgė situaciją, susijusią su. Stebina rašo:

    Kai atidarote arba vykdote failą „Windows“, „Windows“ užrakina failą (tai yra paprastinimas, bet paprastai tiesa). Proceso užrakintas failas negali būti ištrintas, kol šis procesas neatleidžia. Štai kodėl, kai „Windows“ turi atnaujinti save, jums reikia paleisti iš naujo, kad jis įsigaliotų.

    Kita vertus, „Unix“ panašios operacinės sistemos, tokios kaip „Linux“ ir „Mac OS X“, neužrakina failo, o pagrindiniai diskų sektoriai. Tai gali atrodyti triviška diferenciacija, tačiau tai reiškia, kad failo įrašą failų sistemos turinyje galima ištrinti nepažeidžiant jokių programų, kurios jau turi failą. Taigi galite ištrinti failą, kol jis vis dar vykdomas ar kitaip naudojamas, ir jis ir toliau egzistuos diske tol, kol tam tikras procesas turės atvirą rankenėlę, net jei jo įrašymas failų lentelėje yra dingo.

    Davidas Schwartzas išplečia šią idėją ir pabrėžia, kaip turėtų būti idealiai ir kaip jie yra praktiškai:

    „Windows“ yra numatytasis automatinis, privalomas failų užrakinimas. Numatyta, kad UNIXs būtų rankinis, kooperatyvinis failų užrakinimas. Abiem atvejais numatytieji nustatymai gali būti viršyti, tačiau abiem atvejais jie paprastai nėra.

    Daug senų „Windows“ kodų naudoja C / C ++ API (funkcijas, pvz., Fopen), o ne vietinę API (veikia kaip „CreateFile“). „C / C + +“ API suteikia jums jokio būdo nurodyti, kaip veikia privalomas užraktas, taigi gausite numatytuosius nustatymus. Numatytasis „akcijos režimas“ paprastai draudžia „prieštaringas“ operacijas. Jei atidarote rašymui skirtą failą, laikoma, kad rašoma, kad jis prieštarauja, net jei niekada faktiškai nerodysite failo. Įveskite pavadinimą.

    Ir čia čia blogėja. Išskyrus atidarymą skaitymui ar rašymui, C / C ++ API nepateikia jokio būdo nurodyti, ką ketinate daryti su failu. Taigi API turi daryti prielaidą, kad ketinate atlikti bet kokią teisinę operaciją. Kadangi užrakinimas yra privalomas, bus atmestas atviras, leidžiantis prieštaraujančią operaciją, net jei kodas niekada nebuvo skirtas atlikti prieštaringą operaciją, bet tik atidarė failą kitam tikslui.

    Taigi, jei kodas naudoja C / C + + API, arba naudoja vietinę API, konkrečiai nesvarstydamas šių klausimų, jie baigs užkirsti kelią maksimaliam galimų operacijų rinkiniui kiekvienam atidarytam failui ir negalėdami atidaryti failo, nebent kiekvienas galimas jų veikimas gali būti įvykdytas, kai jis atidarytas, yra neaiški.

    Mano nuomone, „Windows“ metodas veiktų daug geriau nei UNIX metodas, jei kiekviena programa pasirinktų savo dalijimosi režimus ir atidarytus režimus išmintingai ir švelniai tvarkant gedimo atvejus. Vis dėlto UNIX metodas veikia geriau, jei kodas nerimauja galvoti apie šias problemas. Deja, pagrindinė C / C ++ API nėra gerai susieta su „Windows“ failų API taip, kad tvarkytų bendrinimo režimus ir prieštarauja gerai. Taigi grynasis rezultatas yra šiek tiek nepatogus.

    Čia jūs turite: du skirtingi failų tvarkymo metodai du du skirtingus rezultatus.


    Ar ką nors papildyti paaiškinimu? Garsas išjungtas komentaruose. Norite perskaityti daugiau atsakymų iš kitų „tech-savvy Stack Exchange“ vartotojų? Čia rasite visą diskusijų temą.