1

以下摘自linux内核:

/*
 * "id" is the POSIX thread ID. We use the
 * files pointer for this..
 */
int filp_close(struct file *filp, fl_owner_t id)

文档说id是 posix 线程 id,它应该是current->files.

但是,我在 Linux 内核中发现了很多用法,例如acct_on,将其用作filp_close(filp, NULL)

我的问题是:

为什么调用时可以接受 NULL filp_close

争论的意图是什么id

4

1 回答 1

1

根据这个讨论,正式的描述fl_owner_t将是

A generic "file lock owner" value. This is set differently for different 
types of locks. 

The POSIX file lock owner is determined by the "struct files_struct" in the 
thread group. 

Flock (BSD) locks, OFD locks and leases set the fl_owner to the 
file description pointer. 

但实际上这是不透明的指针

legacy typedef, should eventually go away

它指的是进程文件描述符表(struct files_struct)。

至于filp_close函数,只有fs/file.csource 使用非 NULLid参数。所有其他用户filp手动创建(使用filp_openor )并作为 NULLfile_open_name传递。id

于 2015-09-07T17:03:41.443 回答