17Aug

Kāpēc es nevaru mainīt lietojamos failus Windows tāpat kā es varu Linux un OS X?


Kad jūs izmantojat Linux un OS X, operētājsistēma neapstāsies jūs no pašreiz esošā faila dzēšanas operētājsistēmā Windows, jums to tieši nepieļaus. Kas dod? Kāpēc jūs varat rediģēt un dzēst lietojamos failus no Unix sistēmām, bet ne Windows?

Šodienas jautājums &Atbildes sesija mums priecājas par SuperUser - Stack Exchange, kas ir kopienas un 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 apstrādā lietojumfailus citādi:

Viena no lietām, kas ir mani mulsinājis, kopš es sāku izmantot Linux, ir tas, ka tas ļauj mainīt nosaukumufailu vai pat dzēst to, kamēr tas tiek lasīts. Piemērs ir tas, kā es nejauši mēģināju dzēst videoklipu, kamēr tas tika atskaņots. Man izdevās un esmu pārsteigts, jo es uzzināju, ka jūs varat mainīt tikai jebkura faila saturu, neuztraucoties, vai tas tiek izmantots brīdī vai ne.

Tātad, kas notiek aiz ainas un neļauj tam nekļūdīgi izdzēst lietas Windows, kā viņš var Linux?

Atbildes

SuperUser atbildes sniedza nelielu ieskatu situācijā, kas saistīta ar mēnesi. Amazed raksta:

Katru reizi, kad atverat vai izpildāt failu sistēmā Windows, sistēma Windows bloķē failu( tas ir vienkāršošana, bet parasti tā ir taisnība). Failu, ko bloķē process, nevar izdzēst, kamēr šis process to neizlaiž.Tāpēc ikreiz, kad operētājsistēmai Windows ir jāatjaunina pati programma, tā ir jāpārstart, lai tā stātos spēkā.

No otras puses, Unix līdzīgās operētājsistēmas, piemēram, Linux un Mac OS X, faila neaizsargā, bet gan pamatā esošie diska sektori. Tas var šķist nenozīmīgas diferenciācijas, bet tas nozīmē, ka faila ierakstu faila sistēmas satura rādītājā 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 izmantots, un tas turpinās pastāvēt diskā, kamēr kādam procesam ir atvērts rokturis, lai gan tā ieraksts failu tabulā ir pagājis.

David Schwartz izvērš ideju un uzsver, kā viss būtu ideāli un kā tas ir praktiski:

Windows noklusējumus automātiski, obligāti failu bloķēšanai. UNIXs pēc noklusējuma ir manuāla, kooperatīva failu bloķēšana. Abos gadījumos noklusējumus var pārtvert, bet abos gadījumos tie parasti nav.

Vecā Windows koda daudz izmanto C / C ++ API( funkcijas, piemēram, fopen), nevis vietējo API( funkcijas, piemēram, CreateFile).C / C ++ API neļauj norādīt, kā darbojas obligātā bloķēšana, tādējādi jūs saņemsiet noklusējumus. Noklusējuma "koplietošanas režīms" parasti aizliedz "konfliktējošas" darbības. Ja atverat failu rakstīšanai, tiek pieņemts, ka rakstiski tiek konflikti, pat ja jūs nekad faktiski rakstāt failā.Tas pats par pārdēvēšanu.

Un šeit ir pasliktinājies. C / C ++ API, izņemot atvēršanu lasīšanai vai rakstīšanai, nav veids, kā norādīt, ko jūs plānojat darīt ar failu. Tātad API ir jāpieņem, ka jūs gatavojaties veikt jebkādu juridisku darbību. Tā kā bloķēšana ir obligāta, tiek atvērta atļauja, kas ļauj konfliktējošu darbību atspēkot, pat ja kods nekad nav paredzēts veikt konfliktējošo operāciju, bet tikai atver failu citiem mērķiem.

Tāpēc, ja kods izmanto C / C ++ API vai izmanto vietējo API bez īpašas domāšanas par šiem jautājumiem, tie izbeigs, novēršot iespējamo maksimālo darbību kopumu katram atvērtam failam un nespējot atvērt failu, ja vien netiks veikta visa iespējamā darbībaviņi varēja to uzlādēt, kad atvērts, ir nekonfliktēts.

Manuprāt, Windows metode darbosies daudz labāk nekā UNIX metode, ja katrai programmai būtu jāizvēlas savi koplietošanas režīmi un atvērtie režīmi saprātīgi un rūpīgi jāizmanto neveiksmju gadījumos. UNIX metode tomēr darbojas labāk, ja kods neuztraucas domāt par šiem jautājumiem. Diemžēl C / C ++ API pamatvirziens neder mapē uz Windows failu API tādā veidā, kas apstrādā koplietošanas režīmus, un labi atveras pretrunīgas versijas. Tātad neto rezultāts ir nedaudz netīrs.

Tur jums ir: divas dažādas pieejas failu apstrādei rada divus dažādus rezultātus.

Vai kaut kas jāpievieno paskaidrojumam? Skatieties komentāros. Vēlaties lasīt citas atbildes no citiem tehnoloģiju savvy Stack Exchange lietotājiem?Šeit skatiet pilnu diskusiju pavedienu.