Karena file dapat dibuka beberapa kali, saat Anda menutup deskriptor, hanya pada panggilan penutupan terakhir untuk referensi terakhir ke rilis file yang dipanggil. Jadi ada perbedaan antara close dan release.
release:dipanggil pada penutupan terakhir(2) file ini, yaitu whenfile->f_count mencapai 0. Meskipun didefinisikan sebagai int pengembalian, nilai pengembalian diabaikan oleh VFS (lihat fs/file_table.c:__fput()). lebih
Saya mengalami kebingungan serupa. Perreal benar dalam rilis itu tidak dipanggil saat tutup dipanggil. Berikut kutipan dari buku Linux Device Drivers edisi ke-3:
int (*flush) (struct file *);
Operasi flush dipanggil saat proses menutup salinan deskriptor file untuk perangkat; itu harus mengeksekusi (dan menunggu) setiap operasi luar biasa pada perangkat. Ini jangan disamakan dengan operasi fsync yang diminta oleh program pengguna. Saat ini, flush hanya digunakan dalam kode sistem file jaringan (NFS). Jika flush adalah NULL, itu tidak akan dipanggil.
int (*release) (struct inode *, struct file *);
Operasi ini dipanggil saat struktur file dirilis. Seperti terbuka, rilis bisa hilang.
Perhatikan bahwa rilis tidak dipanggil setiap kali proses memanggil tutup. Setiap kali struktur file dibagikan (misalnya, setelah fork atau dup), rilis tidak akan dipanggil hingga semua salinan ditutup. Jika Anda perlu menghapus data yang tertunda saat ada salinan yang ditutup, Anda harus menerapkan metode flush.