Prečo nemôžem meniť používané súbory v systéme Windows ako môžem na Linuxe a OS X?

Obsah:

Prečo nemôžem meniť používané súbory v systéme Windows ako môžem na Linuxe a OS X?
Prečo nemôžem meniť používané súbory v systéme Windows ako môžem na Linuxe a OS X?

Video: Prečo nemôžem meniť používané súbory v systéme Windows ako môžem na Linuxe a OS X?

Video: Prečo nemôžem meniť používané súbory v systéme Windows ako môžem na Linuxe a OS X?
Video: Technology Stacks - Computer Science for Business Leaders 2016 - YouTube 2024, Apríl
Anonim
 Ak používate operačný systém Linux a operačný systém OS X, operačný systém vám neumožní odstrániť súbor, ktorý sa v súčasnosti používa, ale v systéme Windows budete výslovne zakázaný. Čo dáva? Prečo môžete upravovať a odstraňovať súbory používané v systémoch odvodených od systému Unix, nie Windows?
Ak používate operačný systém Linux a operačný systém OS X, operačný systém vám neumožní odstrániť súbor, ktorý sa v súčasnosti používa, ale v systéme Windows budete výslovne zakázaný. Čo dáva? Prečo môžete upravovať a odstraňovať súbory používané v systémoch odvodených od systému Unix, nie Windows?

Dnešná relácia otázok a odpovedí sa k nám dostala s láskavým združením oddeleniu SuperUser - rozdelenie Stack Exchange, skupiny komunitných skupín otázok a odpovedí.

Otázka

Čítač SuperUser the.midget chce vedieť, prečo Linux a Windows zaobchádza s in-use súbormi inak:

One of the things that has puzzled me ever since I started using Linux is the fact that it allows you to change the name of a file or even delete it while it is being read. An example is how I accidentally tried to delete a video while it was playing. I succeeded, and was surprised as I learnt that you can change just about anything in a file without caring if it’s being used at the moment or not.

Takže čo sa deje v zákulisí a zabráni mu nechutne vymazávať veci v systéme Windows, ako je to v Linuxe?

Odpoveď

Prispievatelia služby SuperUser prinášajú nejaké informácie o situácii. Amazed píše:

Kedykoľvek otvoríte alebo spustíte súbor v systéme Windows, systém Windows zablokuje súbor na mieste (ide o zjednodušenie, ale zvyčajne je to pravda.) Súbor, ktorý je uzamknutý procesom, sa nedá odstrániť, kým ho proces neuvoľní. To je dôvod, prečo vždy, keď sa systém Windows musí sám aktualizovať, potrebujete reštart pre jeho efekt.

Na druhej strane operačné systémy podobné Unixu ako Linux a Mac OS X neuzamknú súbor, ale skôr podkladové diskové sektory. Môže sa to zdať triviálna diferenciácia, ale to znamená, že záznam súboru v tabuľke obsahového systému môže byť odstránený bez narušenia akéhokoľvek programu, ktorý už má súbor otvorený. Takže môžete odstrániť súbor, zatiaľ čo sa stále vykonáva alebo inak používa a bude naďalej existovať na disku, ak niektorý proces má otvorený popisovač, aj keď je jeho záznam v tabuľke súborov preč.

David Schwartz rozširuje túto myšlienku a zdôrazňuje, ako by mali byť ideálne veci a aké sú v praxi:

Windows defaults to automatic, mandatory file locking. UNIXes default to manual, cooperative file locking. In both cases, the defaults can be overriden, but in both cases they usually aren’t.

A lot of old Windows code uses the C/C++ API (functions like fopen) rather than the native API (functions like CreateFile). The C/C++ API gives you no way to specify how mandatory locking will work, so you get the defaults. The default “share mode” tends to prohibit “conflicting” operations. If you open a file for writing, writes are assumed to conflict, even if you never actually write to the file. Ditto for renames.

And, here’s where it gets worse. Other than opening for read or write, the C/C++ API provides no way to specify what you intend to do with the file. So the API has to assume you are going to perform any legal operation. Since the locking is mandatory, an open that allows a conflicting operation will be refused, even if the code never intended to perform the conflicting operation but was just opening the file for another purpose.

So if code uses the C/C++ API, or uses the native API without specifically thinking about these issues, they will wind up preventing the maximum set of possible operations for every file they open and being unable to open a file unless every possible operation they could perform on it once opened is unconflicted.

In my opinion, the Windows method would work much better than the UNIX method if every program chose its share modes and open modes wisely and sanely handled failure cases. The UNIX method, however, works better if code doesn’t bother to think about these issues. Unfortunately, the basic C/C++ API doesn’t map well onto the Windows file API in a way that handles share modes and conflicting opens well. So the net result is a bit messy.

Tam to máte: dva rôzne prístupy k spracovaniu súborov prinášajú dva rôzne výsledky.

Máte niečo doplniť vysvetlenie? Zvuk vypnúť v komentároch. Chcete si prečítať viac odpovedí od iných používateľov technológie Stack Exchange? Pozrite sa na celý diskusný príspevok tu.

Odporúča: