Mājas lapa » » Kāpēc es nevaru mainīt lietojamos failus uz Windows, piemēram, Linux, un OS X?

    Kāpēc es nevaru mainīt lietojamos failus uz Windows, piemēram, Linux, un OS X?


    Lietojot Linux un OS X, operētājsistēma neļaus jums izdzēst datni, kas pašlaik tiek izmantota vēl Windows sistēmā, un jūs tiksiet skaidri aizliegts to darīt. Kas dod? Kāpēc jūs varat rediģēt un izdzēst lietotājus failus no Unix iegūtajām sistēmām, bet ne Windows?

    Šodienas jautājumu un atbilžu sesija mums dod pieklājību no SuperUser-Stack Exchange apakšnodaļas, kas ir kopienas orientēta Q & A tīmekļa vietņu grupa.

    Jautājums

    SuperUser lasītājs the.midget vēlas uzzināt, kāpēc Linux un Windows atšķirīgi apstrādā lietotos failus:

    Viena no lietām, kas mani satrauc, kopš es sāku izmantot Linux, ir fakts, ka tas ļauj mainīt faila nosaukumu vai pat izdzēst to lasīšanas laikā. Piemērs ir tas, kā es nejauši mēģināju izdzēst videoklipu, kamēr tā spēlēja. Man izdevās, un es biju pārsteigts, jo es uzzināju, ka jūs varat kaut ko mainīt failā bez aprūpes, ja to lieto pašlaik vai nē.

    Tātad, kas notiek aiz ainas un liedz viņam nevēlami dzēst lietas Windows sistēmā, piemēram, Linux?

    Atbilde

    SuperUser iemaksas sniedz nelielu priekšstatu par situāciju. Pārsteidz rakstīts:

    Ikreiz, kad atverat vai izpildāt failu sistēmā Windows, sistēma Windows bloķē failu (tas ir vienkāršojums, bet parasti tā ir taisnība). Failu, kas ir bloķēts ar procesu, nevar izdzēst, kamēr šis process neatbrīvo to. Šī iemesla dēļ ikreiz, kad Windows ir jāatjaunina, jums ir nepieciešams atsāknēšana, lai tas stātos spēkā.

    No otras puses, Unix līdzīgas operētājsistēmas, piemēram, Linux un Mac OS X, neizslēdz failu, bet gan pamatā esošās disku nozares. Tas var šķist maznozīmīga diferenciācija, bet tas nozīmē, ka faila ierakstu failu sistēmas satura tabulā var izdzēst, netraucējot nevienu programmu, kurai jau ir atvērts fails. Tātad jūs varat izdzēst failu, kamēr tas joprojām tiek izpildīts vai citādi tiek lietots, un tas turpinās pastāvēt diskā, ja vien tam ir atvērts rokturis, pat ja tā ieraksts faila tabulā ir aizgājis.

    David Schwartz izvērš šo ideju un uzsver, kā lietas būtu ideāli un kā tās ir praksē:

    Windows noklusējuma iestatījums ir automātiska, obligāta failu bloķēšana. UNIXs noklusējuma iestatījums ir manuāla, kooperatīva failu bloķēšana. Abos gadījumos noklusējuma vērtības var pārsniegt, bet abos gadījumos tās parasti nav.

    Daudz vecu Windows kodu izmanto C / C + + API (funkcijas, piemēram, fopen), nevis vietējo API (funkcijas, piemēram, CreateFile). C / C + + API sniedz jums nekādu veidu, kā noteikt, kā darbosies obligātā bloķēšana, lai iegūtu noklusējuma vērtības. Noklusējuma “dalīšanas režīms” mēdz aizliegt “pretrunīgas” darbības. Ja atverat failu rakstīšanai, tiek pieņemts, ka raksta konflikts, pat ja jūs nekad neesat rakstījis failu. Ditto par pārdēvēšanu.

    Un šeit, kur tas pasliktinās. C / C + + API, kas nav atvērta lasīšanai vai rakstīšanai, nekādā veidā nenosaka to, ko vēlaties darīt ar failu. Tāpēc API ir jāpieņem, ka jūs gatavojaties veikt jebkuru juridisku darbību. Tā kā bloķēšana ir obligāta, tiks atteikta atvērta darbība, kas atļauj konfliktējošu darbību, pat ja kods nekad nav paredzēts, lai veiktu konfliktējošo darbību, bet tikai atvēra failu citam mērķim.

    Tātad, ja kods izmanto C / C + + API vai izmanto vietējo API, nepārdomājot šos jautājumus, tie likvidēs maksimālo iespējamo darbību kopumu katram failam, ko tie atver, un nevar atvērt failu, ja vien tie nav iespējams. to varēja izpildīt, tiklīdz tā ir atvērta.

    Manuprāt, Windows metode darbosies daudz labāk nekā UNIX metode, ja katra programma izvēlētos savu daļu režīmus un atvērtus režīmus gudri un bezgalīgi apstrādātiem neveiksmes gadījumiem. Tomēr UNIX metode darbojas labāk, ja kods neraizējas par šiem jautājumiem. Diemžēl pamata C / C + + API nav labi izveidots uz Windows faila API tādā veidā, kas apstrādā koplietošanas režīmus un konfliktējošas atveras labi. Tātad neto rezultāts ir mazliet netīrs.

    Tur jums tas ir: divas dažādas pieejas failu apstrādei dod divus atšķirīgus rezultātus.


    Vai kaut kas jāpievieno paskaidrojumam? Skaņas izslēgšana komentāros. Vai vēlaties lasīt vairāk atbildes no citiem tehnoloģiju gudriem Stack Exchange lietotājiem? Apskatiet pilnu diskusiju pavedienu šeit.