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

查询是获取目录的内容。已与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。
进一步的客户要求一定数量的条目,最大数量。我不确定确切的最大值,但是大约是80。

一种。一个大缓冲区。大小是这样的:

80 x(255 + sizeof(结构notifyfs_entry_struct))

确保将超过20400字节。

b。使用iovec或readdir之类的固定大小的块。

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

斯蒂夫

最佳答案

由于您提到“连接”,所以我假设您正在谈论TCP套接字。

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

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

10-08 04:03