【发布时间】:2011-07-22 11:28:56
【问题描述】:
在我的一个项目中,客户端程序中的 opendir() 调用使用 LD_PRELOAD 进行干预,并发送到文件服务器进行处理(我在调用 opendir() 之前登录服务器)。因此,调用通过一个套接字。现在如何通过套接字将指向 DIR 结构的指针(从 opendir() 调用返回)从服务器返回到客户端。我是否将其转换为字符串并发送?
【问题讨论】:
在我的一个项目中,客户端程序中的 opendir() 调用使用 LD_PRELOAD 进行干预,并发送到文件服务器进行处理(我在调用 opendir() 之前登录服务器)。因此,调用通过一个套接字。现在如何通过套接字将指向 DIR 结构的指针(从 opendir() 调用返回)从服务器返回到客户端。我是否将其转换为字符串并发送?
【问题讨论】:
客户端和服务器有不同的地址空间,即使它们在同一台机器上。因此,您不可能通过套接字发送指针并期望它在另一端做任何有意义的事情。
一种有效的方法是将结构放置在共享内存区域中,并将偏移量发送到共享内存区域。显然,这也只有在客户端和服务器在同一台物理机器上时才有效。
编辑:
而且,即使这对读取数据有效,您也应该(显然)提防调用 closedir 之类的函数或以其他方式从其他进程中释放内存。这样的事情几乎可以肯定意味着非常糟糕的运气(在某种意义上:现在你要死了)。
在客户端和服务器位于不同机器上的“正常”情况下,您根本无法做这样的事情。当然,您可以发送字符串数据或序列化数据,但不能发送指针或类似的东西。
【讨论】: