Windows default ke otomatis, penguncian file wajib. UNIX default untuk penguncian file secara manual dan kooperatif. Dalam kedua kasus, standarnya bisa diganti, tetapi dalam kedua kasus biasanya tidak.
Banyak kode Windows lama menggunakan C / C ++ API (fungsi suka fopen
) daripada API asli (fungsi suka CreateFile
). C / C ++ API tidak memberi Anda cara untuk menentukan bagaimana penguncian wajib akan bekerja, sehingga Anda mendapatkan default. "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, sebuah open
bahwa 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 jauh 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.