我試圖做一個Linux內核模塊,它支持打開,關閉,讀取和寫入操作。 所以我想通過結構file_operations註冊這些函數,但是我無法在結構中找到'close'條目。 我想我應該使用'release'而不是'close',但是我想知道爲什麼這個名字是'release'而不是'close'?爲什麼close函數在Linux內核的`struct file_operations`中被稱爲release?
9
A
回答
11
4
我也有類似的困惑。 Perreal是正確的,因爲在調用close時不會調用該版本。這裏是從書Linux Device Drivers 3rd edition的提取物:
int (*flush) (struct file *);
當一個進程關閉其用於設備的文件描述符的拷貝的刷新操作被調用;它應該執行(並等待)設備上的任何未完成的操作。這不能與用戶程序請求的fsync操作混淆。目前,flush僅用於網絡文件系統(NFS)代碼。如果flush爲NULL,則不會調用它。
int (*release) (struct inode *, struct file *);
當文件結構被釋放時調用此操作。像open一樣,release可能會丟失。
請注意,每次進程調用close時都不會調用release。無論何時共享文件結構(例如,在fork或dup之後),在所有副本都關閉之前,不會調用release。如果您需要在任何副本關閉時刷新待處理數據,則應執行刷新方法。
相關問題
- 1. 什麼是「struct file_operations」參數?
- 2. 爲什麼Linux內核具有`struct sock`和`struct socket`?
- 3. linux內核:爲什麼不把設備作爲platform_device的第一個成員struct
- 4. 爲什麼在很多示例中的函數被稱爲foo
- 5. 爲什麼Linux內核函數filp_close中的posix線程id可能爲NULL?
- 6. 爲什麼內核使用copy_to_user()函數?
- 7. 什麼呢的struct sched_domain代表在在include/linux/sched.h中(在內核調度域)
- 8. OpenCL:使用struct作爲內核參數
- 9. Linux內核:獲取函數地址爲內核驅動程序
- 10. 爲什麼叫內核的內核?
- 11. 爲什麼英特爾MKL稱爲數學「內核」庫?
- 12. 爲什麼朋友函數會被定義爲struct - boost thread_data的一部分?
- 13. 爲什麼linux內核將我的RW片段映射爲RWX?
- 14. 爲什麼linux內核中的全局變量是靜態的?
- 15. CachedRowSet :: release()與close()
- 16. Linux內核sendpage函數
- 17. 很難理解爲什麼這個函數被稱爲MapReduce
- 18. 爲什麼typeof被稱爲運算符而不是函數?
- 19. 爲什麼Linux內核中的spinlock no-op(non-SMP)?
- 20. Linux內核:爲什麼add_timer()正在修改我的「expires」值?
- 21. 什麼是Linux內核源
- 22. 暫停Linux內核函數
- 23. Linux內核中的struct net_device的dev_addr和perm_addr之間有什麼區別
- 24. Linux內核哈希表struct hlist_head
- 25. 爲什麼jQuery被稱爲jQuery?名稱的原因是什麼?
- 26. linux內核函數page_address()
- 27. Linux內核ip_options_build()函數
- 28. 爲什麼要將extern struct傳遞給C中的函數?
- 29. 什麼Linux內核的C函數表()出現「need_resched」平均
- 30. Mac OSX? Linux呢? X?侏儒? KDE?爲什麼osx被認爲是linux,爲什麼它不被認爲是linux?
所以你問爲什麼它被稱爲'release'而不是'close'? – cnicutar 2012-07-09 10:58:00
是的,我確定了標題。 – 2012-07-09 11:06:17