17Aug
A Linux és az OS X operációs rendszer használata esetén az operációs rendszer nem akadályozza meg a jelenleg használt Windows operációs rendszer törlését, így Ön kifejezetten tiltja ezt. Mi ad? Miért szerkesztheti és törölheti a használatban lévő fájlokat Unix-eredetű rendszereken, de nem Windows alatt?
A mai kérdés &A válaszüzenet a SuperUser - a Stack Exchange megosztottságának köszönhetően - a Q & A webhelyek közösségi szintű csoportosítása.
Kérdés
SuperUser olvasó az.midget tudni akarja, hogy a Linux és a Windows miért különbözik a használatban lévő fájlok kezelése:
Az egyik dolog, ami a Linux használatának kezdete óta zavarba jött, az az a tény, hogy megváltoztathatja aegy fájlt, vagy akár törölheti is, miközben olvasható.Például az, hogy véletlenül megpróbáltam törölni egy videót lejátszás közben. Sikerült, és meglepődtem, amikor megtudtam, hogy bármit is megváltoztathatsz egy fájlt, anélkül, hogy gondoskodnék arról, hogy a pillanat alatt használják-e vagy sem.
Szóval mi történik a színfalak mögött, és megakadályozza, hogy a Windows-ban a dolgokat törölje, ahogyan ő a Linuxban?
Az
válasz A SuperUser-közreműködők rámutatnak a.midget helyzetére. Megdöbbentett:
Amikor megnyitja vagy végrehajt egy fájlt a Windows rendszerben, a Windows zárolja a fájlt a helyén( ez egy egyszerűsítés, de általában igaz.) Egy folyamat által lezárt fájlt nem lehet törölni mindaddig, amíg a folyamat el nem hagyja. Ezért minden alkalommal, amikor a Windowsnak frissíteni kell magát, újbóli indítás szükséges ahhoz, hogy érvénybe lépjen.
Másfelől a Unix-szerű operációs rendszerek, mint például a Linux és a Mac OS X nem zárolják a fájlt, hanem az alapul szolgáló lemezszektorokat. Ez triviális megkülönböztetésnek tűnhet, de ez azt jelenti, hogy a fájlrendszer rekordja a fájlrendszer-tartalomjegyzékben törölhető anélkül, hogy zavarja azokat a programokat, amelyek már megnyitják a fájlt.Így törölhet egy fájlt, miközben még mindig végrehajtásra vagy egyébként használatban van, és továbbra is létezhet a lemezen, mindaddig, amíg bizonyos folyamatoknak nyitott fogantyújuk van még akkor is, ha annak a fájltáblába való beírása eltűnt.
David Schwartz kiterjeszti az ötletet, és kiemeli, hogy a dolgok ideálisak legyenek, és hogyan működnek a gyakorlatban:
A Windows alapértelmezés szerint az automatikus, kötelező fájlzárás. A UNIX alapértelmezés szerint kézi, együttműködő fájlzárás. Mindkét esetben az alapértelmezések felülbírálhatók, de mindkét esetben általában nem.
Sok régi Windows-kód használja a C / C ++ API-t( olyan funkciókat, mint a fopen), nem pedig a natív API-t( olyan funkciókat, mint a CreateFile).A C / C ++ API nem ad módot arra, hogy meghatározza, hogyan működik a kötelező zár, így megkapja az alapértelmezett értékeket. Az alapértelmezett "megosztási mód" megakadályozza az ütköző műveleteket. Ha megnyit egy fájlt az íráshoz, a szerzők feltételezik, hogy ütköznek, még akkor is, ha soha nem írnak a fájlra. Ditto az átnevezésekre.
És itt van, ahol rosszabb lesz. A C / C ++ API nem nyitja meg az olvasást és az írást, így nem tudja meghatározni, hogy mit szándékozik csinálni a fájllal. Tehát az API-nak feltételeznie kell, hogy bármilyen jogi műveletet végrehajt majd. Mivel a lezárás kötelező, egy nyitott, amely lehetővé teszi az egymásnak ellentmondó műveletet, akkor is megtagadják, még akkor is, ha a kód sohasem kívánja végrehajtani az ütköző műveletet, hanem csak megnyitotta a fájlt egy másik célra.
Tehát, ha a kód a C / C ++ API-t használja, vagy a natív API-t használja anélkül, hogy kifejezetten elgondolkodna ezekkel a problémákkal kapcsolatban, felszámolják a lehetséges összes művelet maximális megakadályozását minden megnyitott fájl számára, és nem tudnak megnyitni egy fájlt,képesek voltak rá, amikor megnyílt, nem baj.
Véleményem szerint a Windows módszer sokkal jobban működne, mint a UNIX módszer, ha minden program választotta a megosztási módjait és a nyitott módokat bölcsen és szelíden kezeli a hiba eseteket. A UNIX módszer azonban jobban működik, ha a kód nem foglalkozik ezekkel a kérdésekkel. Sajnos az alap C / C ++ API nem jól illeszkedik a Windows fájl API-ba oly módon, hogy kezeli a megosztási módokat, és ellentétes megnyílik. Tehát a nettó eredmény egy kicsit rendetlen.
Ott van ez: a fájlkezelés két különböző megközelítése két különböző eredményt eredményez.
Van valami, amit hozzá lehet adni a magyarázathoz? Hangzik ki a megjegyzésekben. Szeretne többet válaszolni a többi technikus-tudós Stack Exchange felhasználóiról? Nézze meg a teljes vitafonalat itt.