1

在我的一个项目opendir()中,使用 LD_PRELOAD 干预客户端程序中的调用并将其发送到文件服务器进行处理(我在调用之前在服务器上进行了一些登录opendir())。因此,调用通过一个套接字。现在如何opendir()通过套接字将指向 DIR 结构(从调用返回)的指针从服务器返回到客户端。我是否将其转换为字符串并发送?

4

1 回答 1

6

客户端和服务器有不同的地址空间,即使它们在同一台机器上。因此,您不可能通过套接字发送指针并期望它在另一端做任何有意义的事情。

一种有效的方法是将结构放置在共享内存区域中,并将偏移量发送到共享内存区域。显然,这也只有在客户端和服务器位于同一台物理机器上时才有效。
编辑:
而且,即使这适用于读取数据,您应该(显然)提防调用函数,例如closedir或以其他方式从其他进程中释放内存。这样的事情几乎可以肯定意味着非常糟糕的运气(从某种意义上说:现在你要死了)。

在客户端和服务器位于不同机器上的“正常”情况下,您根本无法做这样的事情。当然,您可以发送字符串数据或序列化数据,但不能发送指针或类似的东西。

于 2011-07-22T11:37:50.793 回答