Mengapa Saya Tidak Dapat Mengaktifkan File yang Digunakan di Windows Seperti yang Dapat Saya Lakukan di Linux dan OS X?

Daftar Isi:

Mengapa Saya Tidak Dapat Mengaktifkan File yang Digunakan di Windows Seperti yang Dapat Saya Lakukan di Linux dan OS X?
Mengapa Saya Tidak Dapat Mengaktifkan File yang Digunakan di Windows Seperti yang Dapat Saya Lakukan di Linux dan OS X?

Video: Mengapa Saya Tidak Dapat Mengaktifkan File yang Digunakan di Windows Seperti yang Dapat Saya Lakukan di Linux dan OS X?

Video: Mengapa Saya Tidak Dapat Mengaktifkan File yang Digunakan di Windows Seperti yang Dapat Saya Lakukan di Linux dan OS X?
Video: CARA INSTALL APLIKASI ANDROID DI LAPTOP - PLAY GAME ANDROID DENGAN EMULATOR BLUESTACKS TERBARU - YouTube 2024, November
Anonim
 Ketika Anda menggunakan Linux dan OS X, sistem operasi tidak akan menghentikan Anda dari menghapus file yang sedang digunakan namun pada Windows Anda akan secara tegas dilarang melakukannya. Apa yang memberi? Mengapa Anda dapat mengedit dan menghapus file yang sedang digunakan pada sistem yang diturunkan Unix tetapi bukan Windows?
Ketika Anda menggunakan Linux dan OS X, sistem operasi tidak akan menghentikan Anda dari menghapus file yang sedang digunakan namun pada Windows Anda akan secara tegas dilarang melakukannya. Apa yang memberi? Mengapa Anda dapat mengedit dan menghapus file yang sedang digunakan pada sistem yang diturunkan Unix tetapi bukan Windows?

Sesi Tanya & Jawab Hari ini hadir untuk memberi kami hak milik sub divisi SuperUser—a Stack Exchange, pengelompokan situs Q & A berbasis komunitas.

Pertanyaan

SuperUser reader the.midget ingin tahu mengapa Linux dan Windows memperlakukan file yang digunakan secara berbeda:

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.

Jadi apa yang terjadi di balik layar dan mencegahnya menghapus hal-hal yang tidak diinginkan di Windows seperti yang dia dapat di Linux?

Jawabannya

Kontributor SuperUser memberi penjelasan tentang situasi ini. Kagum menulis:

Setiap kali Anda membuka atau mengeksekusi file di Windows, Windows mengunci file di tempat (ini adalah penyederhanaan, tetapi biasanya benar.) File yang dikunci oleh suatu proses tidak dapat dihapus sampai proses itu melepaskannya. Inilah sebabnya mengapa setiap kali Windows harus memperbarui sendiri Anda perlu reboot untuk itu berlaku.

Di sisi lain, sistem operasi mirip Unix seperti Linux dan Mac OS X tidak mengunci file melainkan sektor disk yang mendasarinya. Ini mungkin tampak sebagai pembedaan sepele tetapi itu berarti bahwa arsip file dalam daftar isi sistem file dapat dihapus tanpa mengganggu program apa pun yang sudah memiliki file terbuka. Jadi Anda dapat menghapus file saat masih dieksekusi atau sedang digunakan dan akan terus ada di disk selama beberapa proses memiliki pegangan terbuka untuk itu meskipun entri dalam tabel file hilang.

David Schwartz memperluas ide dan menyoroti bagaimana hal-hal harus idealnya dan bagaimana praktiknya:

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.

Di sana Anda memilikinya: dua pendekatan berbeda untuk penanganan file menghasilkan dua hasil yang berbeda.

Memiliki sesuatu untuk ditambahkan ke penjelasan? Bicaralah di komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang paham teknologi lainnya? Lihat diskusi lengkap di sini.

Direkomendasikan: