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