gpt4 book ai didi

c - 如何通过套接字 : one buffer, 分散/聚集或 readdir 发送数据?

转载 作者:行者123 更新时间:2023-11-30 17:56:49 26 4
gpt4 key购买 nike

我正在编写一个FUSE覆盖文件系统(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)

请注意,名称的长度不固定,最大为 255。更多的客户要求一定数量的条目,但有上限。我不确定这个最大值到底是多少,但大概是 80。

a.一大缓冲区。大小类似于:

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

这肯定会超过 20400 字节。

b.固定大小的 block ,使用 iovec 或 readdir 之类的东西。

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

斯蒂芬

最佳答案

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

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

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

关于c - 如何通过套接字 : one buffer, 分散/聚集或 readdir 发送数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13219943/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com