Sudah diketahui bahwa sistem UNIX tidak akan benar-benar menghapus file pada disk saat file sedang digunakan. Jadi jika file sedang diakses oleh proses 1 dan proses 2 menghapus file menggunakan rm, proses 1 terus melihat file; selain itu tautan deskriptor file di / proc / (proses 1 id) / fd melaporkan konten asli dari file yang dihapus.
Namun, jika proses 2 menimpa file yang bertentangan dengan menghapusnya (katakan dengan gema "abracadabra"> file.txt), tautan deskriptor file di / proc / (proses 1 id) / fd melaporkan bahan yang ditimpa ("abracadabra") , sementara proses 1 masih dapat mengakses konten asli file. Kenapa ada perbedaan ini?
[Sunting] Cuplikan di bawah ini menanggapi Jim Paris
>uname -a
Linux ravoori-netbook 3.2.0-32-generic-pae #51-Ubuntu SMP Wed Sep 26 21:54:23 UT
C 2012 i686 i686 i386 GNU/Linux
>echo original > /tmp/foo
>tail -0f /tmp/foo &
[2] 6144
>rm /tmp/foo
>cat /proc/6144/fd/3
original
>echo abracadabra > /tmp/foo
>cat /proc/6144/fd/3
original
linux
files
open-files
proc
iruvar
sumber
sumber
Jawaban:
Jika proses 1 sudah mulai membaca file sebelum proses 2 menimpanya, maka akan ada beberapa bagian dari konten yang disimpan dalam
stdio
buffer. Setelah melewati batas ukuran buffer, ia akan dipaksa untuk pergi ke kernel, dan kemudian akan menemukan konten baru yang ditimpa.sumber
Saya tidak setuju:
The
fd
Link masih menunjukkan isi asli, bertentangan dengan apa yang Anda diklaim. Ini dengan Linux 3.5. Apakah Anda melihat sesuatu yang berbeda?sumber