在我的一个项目中,客户端程序中的 opendir()
调用使用 LD_PRELOAD 进行干预,并发送到文件服务器进行处理(我在调用 之前在服务器中做了一些记录打开目录()
)。因此调用通过套接字传递。现在如何通过套接字将指向 DIR 结构(从 opendir()
调用返回)的指针从服务器返回到客户端。我是否将其转换为字符串并发送?
最佳答案
客户端和服务器有不同的地址空间,即使它们在同一台机器上。因此,您不可能通过套接字发送指针并期望它在另一端做任何有意义的事情。
做这种事情的一种有效方法是将结构放在共享内存部分,并将偏移量发送到共享内存区域。显然,这也只有在客户端和服务器位于同一台物理机器上时才有效。
编辑:
而且,即使这适用于读取数据,您也应该(显然)注意调用诸如 closedir
之类的函数或以其他方式从其他进程释放内存。这些事情几乎肯定意味着非常倒霉(在某种意义上:现在你要死了)。
在客户端和服务器位于不同机器上的“正常”情况下,您根本无法做这样的事情。当然,您可以发送字符串数据或序列化数据,但绝不能发送指针或任何类似的数据。
关于c - 在套接字编程中返回指向结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789316/