17Aug

Proč nemohu změnit soubory v systému Windows jako já v Linuxu a OS X?

click fraud protection


Používáte-li operační systém Linux a operační systém OS X, operační systém vás nezastaví v mazání souboru, který je v současné době používán, avšak v systému Windows budete výslovně zakázáno. Co dává?Proč můžete upravovat a odstraňovat soubory používané v systémech odvozených Unix, ale ne Windows?

dnešní otázka &Odpověď na zasedání se k nám dostala s laskavým svolením SuperUser - podřízenou výměnou Stack Exchange, skupině webů Q & A založených na komunitě.

Otázka

SuperUser čtečka the.midget chce vědět, proč Linux a Windows zacházejí s různými způsoby použití souborů:

Jedna z věcí, která mě od doby, kdy jsem začala používat Linux, zmátla, je skutečnost, že vám umožňuje změnit jménosoubor nebo dokonce jej smazat, zatímco je čten. Příkladem je to, že jsem se nechtěně pokusil smazat video během jeho hraní.Podařilo se mi a bylo překvapeno, když jsem se dozvěděla, že se můžete změnit bez ohledu na to, co se v souboru nachází, aniž byste se o to starali, jestli se to právě používá nebo ne.

instagram viewer

Takže co se děje v zákulisí a brání mu nechtěně smazat věci ve Windows, jako by mohl v Linuxu?

Účastníci odpovědi na odpověď

SuperUser vrhají trochu světla o situaci pro tuto věc. Amazed píše:

Kdykoli otevřete nebo spustíte soubor v systému Windows, systém Windows uzamkne soubor na svém místě( toto je zjednodušení, ale obvykle je to pravda.) Soubor, který je uzamčen procesem, nemůže být smazán, dokud se tento proces neuvolní.To je důvod, proč vždy, když se systém Windows musí sám aktualizovat, potřebujete restart pro jeho platnost.

Na druhou stranu, operační systémy typu Unix, jako Linux a Mac OS X, neuzamknou soubor, nýbrž spíše sektory podkladových disků.To se může zdát triviální diferenciace, ale to znamená, že záznam souboru v tabulce obsahu systému souborů může být smazán, aniž by byl rušen žádný program, který již soubor otevřel. Takže můžete soubor smazat, pokud je stále spuštěn nebo jinak používán a bude nadále existovat na disku, pokud nějaký proces má otevřenou úchytku pro něj, přestože jeho záznam v tabulce souborů je pryč.

David Schwartz rozšiřuje myšlenku a zdůrazňuje, jak by měly být v ideálním případě ideály a jak jsou v praxi:

Systém Windows automaticky nastavuje automatické uzamčení souborů.UNIX je výchozí k ručnímu, kooperativnímu blokování souborů.V obou případech mohou být výchozí hodnoty potlačeny, ale v obou případech obvykle nejsou.

Spousta starého kódu Windows používá C / C ++ API( funkce jako fopen) spíše než nativní API( funkce jako CreateFile).Rozhraní C / C ++ API vám neumožňuje určit, jak bude povinné zamykání fungovat, abyste získali výchozí nastavení.Výchozí režim sdílení má tendenci zakazovat "konfliktní" operace. Pokud otevřete soubor pro zápis, předpokládá se, že zápisy budou konflikty, i když ve skutečnosti nikdy do souboru nenapsáte. Ditto pro přejmenování.

A tady se to zhoršuje. Kromě otevření pro čtení nebo zápis, C / C ++ API neumožňuje zadat, co chcete s tímto souborem dělat. API musí předpokládat, že budete provádět jakoukoli legální operaci. Vzhledem k tomu, že uzamčení je povinné, otevření, které umožňuje konfliktní operaci, bude odmítnuto, i když kód nikdy neměl v úmyslu provést konfliktní operaci, ale pouze otevře soubor pro jiný účel.

Pokud tedy kód používá rozhraní C / C ++ API nebo použije nativní API, aniž by se o těchto problémech výslovně zabývaly, zabrání tomu, aby se zabránilo maximální možné operaci pro každý otevřený soubor a nemohl otevřít soubor,oni by mohli hrát na tom, jakmile je otevřen, není konfliktní.

Podle mého názoru by metoda Windows fungovala mnohem lépe než metoda UNIX, pokud si každý program zvolil režim sdílení a otevře režimy moudře a šetrně řešil případy selhání.Metoda UNIX však funguje lépe, pokud se kód neobtěžuje přemýšlet o těchto problémech. Bohužel, základní C / C ++ API mapovat dobře do API souboru Windows způsobem, který zpracovává režimy sdílení a konflikt se otevírá dobře. Takže čistý výsledek je trochu špinavý.

Zde máte: dva různé přístupy k zpracování souborů přinášejí dva různé výsledky.

Musíte něco přidat k vysvětlení?Vypadněte v komentářích. Chcete se dozvědět více odpovědí od ostatních uživatelů technologie Stack Exchange? Podívejte se na celý diskusní příspěvek zde.