Beranda » bagaimana » Mengapa saya tidak bisa mengubah file yang digunakan pada Windows Seperti saya di Linux dan OS X?

    Mengapa saya tidak bisa mengubah file yang digunakan pada Windows Seperti saya di Linux dan OS X?


    Saat Anda menggunakan Linux dan OS X, sistem operasi tidak akan menghentikan Anda menghapus file yang saat ini digunakan pada Windows Anda akan secara tegas dilarang melakukannya. Apa yang menyebabkannya? Mengapa Anda dapat mengedit dan menghapus file yang digunakan dalam sistem turunan Unix tetapi tidak pada Windows?

    Sesi Tanya Jawab hari ini datang kepada kami berkat SuperUser-subdivisi Stack Exchange, pengelompokan situs web Q&A berbasis komunitas.

    Pertanyaan

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

    Salah satu hal yang membingungkan saya sejak saya mulai menggunakan Linux adalah kenyataan bahwa ia memungkinkan Anda untuk mengubah nama file atau bahkan menghapusnya saat sedang dibaca. Contohnya adalah bagaimana saya mencoba secara tidak sengaja menghapus video saat sedang diputar. Saya berhasil, dan terkejut ketika saya mengetahui bahwa Anda dapat mengubah apa saja dalam file tanpa peduli apakah itu sedang digunakan saat ini atau tidak.

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

    Jawabannya

    Kontributor SuperUser menjelaskan situasi untuk.midget. Kagum menulis:

    Setiap kali Anda membuka atau menjalankan file di Windows, Windows mengunci file di tempatnya (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 memerlukan boot ulang agar dapat berfungsi.

    Di sisi lain, sistem operasi mirip Unix seperti Linux dan Mac OS X tidak mengunci file melainkan sektor disk yang mendasarinya. Ini mungkin tampak diferensiasi sepele tetapi itu berarti bahwa catatan file dalam daftar isi filesystem dapat dihapus tanpa mengganggu program yang sudah membuka file tersebut. Jadi Anda dapat menghapus file saat masih dieksekusi atau sedang digunakan dan itu 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 yang seharusnya idealnya dan bagaimana mereka dalam praktiknya:

    Windows default ke otomatis, penguncian file wajib. UNIX default untuk manual, penguncian file kooperatif. Dalam kedua kasus, standarnya dapat diganti, tetapi dalam kedua kasus biasanya tidak.

    Banyak kode Windows lama menggunakan C / C ++ API (fungsi seperti fopen) daripada API asli (fungsi seperti CreateFile). C / C ++ API tidak memberi Anda cara untuk menentukan bagaimana penguncian wajib akan bekerja, sehingga Anda mendapatkan defaultnya. "Mode berbagi" default cenderung melarang operasi "bentrok". Jika Anda membuka file untuk menulis, menulis dianggap bertentangan, bahkan jika Anda tidak pernah benar-benar menulis ke file. Ditto untuk mengganti nama.

    Dan, di sinilah semakin buruk. Selain membuka untuk membaca atau menulis, API C / C ++ tidak memberikan cara untuk menentukan apa yang ingin Anda lakukan dengan file tersebut. Jadi API harus menganggap Anda akan melakukan operasi hukum apa pun. Karena penguncian adalah wajib, terbuka yang memungkinkan operasi yang bertentangan akan ditolak, bahkan jika kode tidak pernah dimaksudkan untuk melakukan operasi yang bertentangan tetapi hanya membuka file untuk tujuan lain.

    Jadi jika kode menggunakan C / C ++ API, atau menggunakan API asli tanpa secara khusus memikirkan masalah ini, mereka akan berakhir mencegah set maksimum operasi yang mungkin untuk setiap file yang mereka buka dan tidak dapat membuka file kecuali setiap operasi yang mungkin mereka bisa tampil di atasnya setelah dibuka tidak berbelit-belit.

    Menurut pendapat saya, metode Windows akan bekerja lebih baik daripada metode UNIX jika setiap program memilih mode berbagi dan mode terbuka dengan bijak dan bijaksana menangani kasus kegagalan. Metode UNIX, bagaimanapun, bekerja lebih baik jika kode tidak repot memikirkan masalah ini. Sayangnya, API C / C ++ dasar tidak memetakan dengan baik ke file API Windows dengan cara yang menangani mode berbagi dan konflik terbuka dengan baik. Jadi hasil akhirnya agak berantakan.

    Itu dia: dua pendekatan berbeda untuk penanganan file menghasilkan dua hasil yang berbeda.


    Punya sesuatu untuk ditambahkan ke penjelasan? Berbunyi dalam komentar. Ingin membaca lebih banyak jawaban dari pengguna Stack Exchange yang mengerti teknologi lainnya? Lihat utas diskusi lengkap di sini.