gpt4 book ai didi

c++ - C++中的欺骗文件描述符

转载 作者:行者123 更新时间:2023-11-30 03:08:41 25 4
gpt4 key购买 nike

我正在编写一个库,它将通过多个路径传输数据; TCP、UDP、RDMA(远程直接内存访问),偶尔通过直接函数调用,其中客户端/服务器被整合到一个二进制文件中。

我将使用文件描述符处理 TCP、UDP、RDMA,并且一直在研究如何使用采用粗略形式的 FunctionCallSocket 类实现类似的东西:

class FunctionCallSocket
{
public:
FunctionCallSocket();
~FunctionCallSocket();

void send(char* buf, std::size_t len);
void recv(char* dest, std::size_t len);

private:
char* m_outboundBuffer;
char* m_inboundBuffer;
};

我想做的是能够像文件描述符一样对待类,这样我就可以将它与 TCP、UDP 等文件句柄一起传递给 select/epoll。

据我所知,文件描述符整数值是由操作系统从一个私有(private)表生成的,该表将文件映射到 id,因此我需要以某种方式欺骗它。

关于如何实现这一点有什么想法吗?

最佳答案

如果您在 Linux 上运行,我建议查看 eventfd - 这正是您要找的东西。

http://www.kernel.org/doc/man-pages/online/pages/man2/eventfd.2.html

以 EFD_SEMAPHORE 模式打开 fd,您可以使用它来跟踪您有多少排队的事件

(每次 write() 调用都会增加内核使用 eventfd 存储的计数器,而每次 read() 都会减少计数器)

关于c++ - C++中的欺骗文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4745897/

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