GNU/Linux >> Belajar Linux >  >> Linux

Mengapa fungsi tutup disebut rilis di `struct file_operations` di kernel Linux?

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.


Linux
  1. Linux – Mengapa Antarmuka Ethernet Disebut Enp0s10 Bukannya Eth0?

  2. Linux – Mengapa Tidak Ada Sistem File Rootfs Di Sistem?

  3. Linux – Mengapa Kernel Tidak Dapat Menjalankan Init?

  1. Salin file di terminal Linux

  2. Di mana fungsi itoa di Linux?

  3. Mengapa melindungi kernel Linux dari pengguna root?

  1. Ganti nama file di terminal Linux

  2. Pindahkan file di terminal Linux

  3. Mengapa 'sshpass' bukan cara yang tepat untuk mengotomatisasi transfer file di Linux