每当在内核空间中创建文件时,就会实例化 struct file 对象。该文件的类型无关紧要。对于设备节点、标准文本文件等,打开文件时会创建一个 struct file 对象。
What I am wondering is when this object is destroyed. Is the struct file object for that file destroyed when we call close() system call for that file?
扩展信息:
struct file
是内核的数据结构。它不能在用户空间 c 程序中使用。内核从此数据类型定义一个对象,以便能够执行某些特定的文件操作。当用户空间程序调用系统调用时,此对象在内核空间中创建open()
。
https://github.com/torvalds/linux/blob/master/include/linux/fs.h
901 行
答案1
为了正确回答,获得一些更具体的信息会很有用。你在什么环境下看到这个结构文件对象? 正在搜索结构文件对象在 Google 中仅指向这个问题。
但一般来说,类Unix操作系统中的文件描述符可以通过库函数创建打开这将使用内核的系统调用。可以通过调用库函数释放和取消分配文件描述符关闭它将再次使用适当的系统调用并确保不会泄漏任何资源。