Linux内核 - 套接字文件描述符关闭位置
问题描述:
在Linux内核中,关闭套接字的文件描述符发生在哪里?我知道一个文件,该文件的文件描述符在fs/open.cs函数sys_close()中关闭。但是,对于套接字文件描述符,这是相同的位置还是其他地方?Linux内核 - 套接字文件描述符关闭位置
另外,套接字是否利用file.c alloc_fd来分配文件描述符,还是使用其他函数?
答
是的,sys_close()
是关闭的入口点全部文件描述符,包括套接字。
sys_close()
调用filp_close()
,它在struct file
对象上调用fput()
。如果最后一个对struct file
的引用已存在,fput()
将调用文件对象的.release()
方法,该方法对于套接字,是net/socket.c
中的sock_close()
函数。
套接字代码使用get_unused_fd()
和put_unused_fd()
来获取和释放文件描述符。
我看到get_unused_fd调用alloc_fd,所以通过在sys_close和alloc_fd中根据需要更改我的代码,这应该处理文件和套接字的所有文件描述符,对吗? – NTek 2010-04-26 02:51:06
也许,很难说不知道你的代码是干什么的。 – caf 2010-04-26 03:27:42