Linux 当试图从';没有开门吗?

Linux 当试图从';没有开门吗?,linux,fuse,Linux,Fuse,我正在实现一个libfuse文件系统。当打开一个文件时,我读取文件属性并将它们存储在一个哈希表中,该哈希表使用我生成的文件句柄进行键控。这有两个目的:维护打开的文件句柄集合,以及缓存在打开过程中检索到的信息 当然,没有什么可以阻止用户代码尝试传递无效的文件句柄,即从未打开的文件读取 我可以从read函数返回许多信息,但我不清楚在这种情况下应该返回哪个信息 如您所见,要返回的正确值应该是EBADF: [EBADF]fildes参数不是为打开的有效文件描述符 阅读 也就是说,如果用户代码传递了一个无

我正在实现一个libfuse文件系统。当打开一个文件时,我读取文件属性并将它们存储在一个哈希表中,该哈希表使用我生成的文件句柄进行键控。这有两个目的:维护打开的文件句柄集合,以及缓存在打开过程中检索到的信息

当然,没有什么可以阻止用户代码尝试传递无效的文件句柄,即从未打开的文件读取

我可以从
read
函数返回许多信息,但我不清楚在这种情况下应该返回哪个信息

如您所见,要返回的正确值应该是
EBADF

[EBADF]fildes参数不是为打开的有效文件描述符 阅读

也就是说,如果用户代码传递了一个无效的文件句柄,Linux内核将在您获得任何发言权之前将
EBADF
返回给用户。

如您所见,返回的正确值将是
EBADF

[EBADF]fildes参数不是为打开的有效文件描述符 阅读


也就是说,如果用户代码传递了一个无效的文件句柄,Linux内核将在您或fuse获得任何发言权之前将
EBADF
返回给用户。

这是真的吗?对于fuse,我的印象是它没有到达内核。我维护的文件句柄是内核不知道的值。您维护的文件句柄与用户代码可以使用的文件句柄非常不同。用户代码只获取数字。内核使用
struct file
(如果数字没有映射到
struct file
,则返回
EBADF
)。Fuse内核模块将
struct file
转换为一个序列化请求,由libfuse读取并转换为
Fuse\u req\t
,这就是您的代码所看到的。这是真的吗?对于fuse,我的印象是它没有到达内核。我维护的文件句柄是内核不知道的值。您维护的文件句柄与用户代码可以使用的文件句柄非常不同。用户代码只获取数字。内核使用
struct file
(如果数字没有映射到
struct file
,则返回
EBADF
)。Fuse内核模块将
struct file
转换为一个序列化请求,libfuse读取该请求并将其转换为
Fuse\u req\t
,这就是您的代码所看到的。