0

我正在编写一个 FUSE 覆盖 fs (notifyfs),它可以是一个数据库客户端可以通过查询从中获取数据。我的目的是让它成为一个缓存/overlayfs/数据库,客户端可以在显示条目及其属性(属性,还有 mimetype、图标等)时从中获取数据。

查询是获取目录的内容。已经与 notifyfs 建立连接 (=fd) 的客户端通过“list_message”请求数据。我现在的问题是如何对 notifyfs 必须给出的响应进行编程。我正在考虑三种/两种不同的方法。请注意以下事项:

notifyfs 以具有不同条目的基本形式响应,其中每个条目都是这样的:

int mode
uid_t uid
gid_t gid
size_t size
timespec ctime
timespec mtime
timespec atime
int lenname
char name[]

(调用这个 notifyfs_entry_struct)

请注意,名称的 len 不是固定的,最大为 255。Futher 客户端要求一定数量的条目,最大。我不确定这个最大值到底是多少,但应该是 80 左右。

一个。一大缓冲。大小类似于:

80 x (255+sizeof(struct notifyfs_entry_struct))

可以肯定的是,这将超过 20400 个字节。

湾。固定大小的块,使用 iovec 或 readdir 之类的东西。

什么是最好的选择?第一种方法使用至少 20400 字节的缓冲区,它很多,但它仍然可行吗?

史蒂夫

4

1 回答 1

0

既然您提到了“连接”,我假设您正在谈论 TCP 套接字。

您选择哪种方法并不重要。a.更容易一些 - 连续内存,缓冲区的简单偏移量。

您需要注意的是TCP 套接字是字节流。它不知道您的消息边界,因此由于您的消息是可变大小的,因此您不知道是否从read(2)or的返回值中获得了完整的消息recv(2)。您将不得不处理部分消息读取并缓冲未处理的字节。

于 2012-11-05T17:33:52.907 回答