Membaca file saat menulis di linux

9

Seperti yang saya mengerti, ketika file sedang ditulis, proses menulis ke file mendapatkan kunci eksklusif. Jadi proses lain tidak dapat mengakses file ini untuk dibaca.

Dengan pengetahuan di atas, saya tidak dapat memahami bagaimana saya dapat memutar video di media player, ketika browser masih mengunduhnya.

Tukang sortir
sumber
1
Silakan tentukan alasan downvote. Terima kasih.
Penyortir
2
Ini tergantung platform, jadi harap tentukan OS yang Anda tanyakan. Saya tahu bahwa Linux tidak menyediakan kunci implisit, tetapi Windows mungkin berbeda.
amon
Saya menggunakan Linux
Sorter

Jawaban:

13

Pemahaman Anda salah. Beberapa proses Linux dapat menulis ke file yang sama sekaligus (dan apa yang terjadi kemudian mungkin tidak ditentukan, kecuali ketika proses menimpa segmen yang berbeda dari file itu). Dan beberapa proses Linux lainnya (misalnya browser Anda) dapat membaca file yang ditulis untuk .

Anda dapat mengadopsi konvensi untuk menghindari itu . Misalnya, Anda dapat menggunakan penguncian file advisory (mengadopsi konvensi bahwa setiap program yang relevan harus melakukan itu), misalnya dengan flock (2) , lockf (3) , dll. Tapi itu tidak akan melarang proses lain (tidak mengikuti konvensi Anda) untuk mengakses (atau bahkan menulis ke) file itu. Anda dapat menggunakan mesin izin (mis. Dengan mendedikasikan pengguna sistem untuk program setuid Anda ).

Lihat juga jawaban ini & itu pada StackOverflow (beberapa dari mereka menyebutkan mekanisme penguncian khusus Linux yang sudah tidak berlaku lagi ). Baca tentang properti ACID , pertimbangkan untuk menggunakan beberapa database ( sqlite , PostGreSQL , MongoDB , dll ...) atau beberapa file yang diindeks ( gdbm ).

Saya tidak tahu Windows, tetapi mendengar desas-desus bahwa itu tidak memungkinkan akses bersamaan atau menulis ke file yang sama.

Basile Starynkevitch
sumber
4

File biasanya tidak dikunci - unix file locking . Ini juga cukup umum untuk memiliki banyak pembaca file tetapi hanya satu penulis. Masalah hanya terjadi ketika Anda ingin memiliki banyak penulis.

Juga, sebagian besar format file video (dan terutama di web) dapat di-streamable, yang berarti Anda tidak perlu memiliki seluruh video untuk memutarnya.

Matt
sumber
Masalah dapat terjadi jika Anda mengandalkan konten file untuk tidak berubah di antara pembacaan, misalnya ketika mencoba menghindari memuat file besar ke dalam memori.
yyny
2

OS Unix tidak menggunakan penguncian wajib (Gnu / Linux adalah Unix, contoh lain adalah UNIX, BSD, Mac OSX). Mengunci seperti dihindari sedapat mungkin.

Beberapa OS lain menggunakan penguncian wajib setiap saat (Terutama OS Windows milik Microsoft). Ini akan menghentikan Anda bermain sampai sepenuhnya diunduh, itu juga akan menghentikan Anda mengubah nama file atau direktori yang terbuka (ada aplikasi yang masuk). Tetapi pada Unix tidak apa-apa. Jika suatu aplikasi perlu dikunci, ia dapat menggunakannya. Tetapi tidak secara normal.

ctrl-alt-delor
sumber
Anda dapat memilih untuk tidak mengunci file di Windows juga. Saya memutar setengah video yang diunduh sepanjang waktu. Penguncian hanya diperlukan untuk executable yang dimuat.
CodesInChaos
@CodesInChaos Terlalu benar, tetapi sebagian besar aplikasi mengunci, apakah Anda tahu jika Anda bisa masuk ke direktori tanpa penguncian? Saya juga hanya berpikir, bagaimana cara kerja executable di Linux tanpa penguncian (Kedua sistem hanya menggunakan waktu loading, jadi bit dapat dimuat lama setelah program dimulai), mungkin menggunakan kekuatan super cowanya.
ctrl-alt-delor
1
Saya pikir perbedaan besar antara Linux dan Windows adalah bahwa Linux memperlakukan file sebagai terpisah dari entri sistem file-nya. Jadi, Anda dapat memutuskan tautan nama file saat terbuka. Windows di sisi lain menunda penghapusan sampai ditutup. Apakah Linux mengizinkan modifikasi menjalankan file yang dapat dieksekusi? Atau apakah itu hanya memungkinkan penghapusan + rekreasi dengan konten yang berbeda?
CodesInChaos
@CodesInChaos Saya kira, saya bertanya-tanya apa yang akan terjadi jika Anda memodifikasinya, tidak menghapus + buat. Dugaan saya adalah bahwa ketika sebuah aplikasi dimuat, OS membuka file dalam mode COW (Copy On Write), jika dan hanya jika Beberapa proses mengubah konten, OS akan membuat salinan (dari blok yang dimodifikasi). Satu salinan ditautkan ke proses, yang lain ke file. Ketika semua proses menggunakan sumber asli ditutup, maka salinan asli dihapus (karena tidak ada entri sistem file). Ini hanya dugaan, berdasarkan apa yang saya tahu OS dapat lakukan.
ctrl-alt-delor