可以通过IPC传递资源吗?
是否可以通过IPC(进程间通信)传递资源(文件句柄、FTP 连接、数据库连接)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
是否可以通过IPC(进程间通信)传递资源(文件句柄、FTP 连接、数据库连接)?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
这取决于 IPC 的类型。一般来说,IPC是一种移动字节的方式,所以不是。
然而,一些 Unix 系统具有一定的移动其他对象的能力。例如,Linux 可以通过 认为包括套接字) >unix-domain socket(我相信流和数据报) - 您必须使用 sendmsg 例程,传入一个包含指向数组中文件描述符的辅助数据指针的 msghdr 结构,并执行必要的操作咒语(SCM_RIGHTS 等)。然后,另一方将在相应的 msghdr 结构中将它们作为工作文件描述符接收,尽管文件描述符的实际数量当然可能不同。您还可以通过这种方式发送流程凭据;这些是发送它们的进程身份的不可伪造的证明,可用于各种模糊的目的。
是否可以移动更高级别的对象取决于它们是否是由文件描述符和字节构建的。但是,请注意,您必须编写代码来移动这些东西;您不会期望能够将它们开箱即用。
It rather depends on the kind of IPC. In general, IPC is a way to move bytes, so no.
However, some unixes have some capacity to move other objects. For example, Linux can send file descriptors (which i think includes sockets) over a unix-domain socket (both stream and datagram, i believe) - you have to use the sendmsg routine, passing in a msghdr struct containing an ancillary data pointer pointing to the file descriptors in an array, and performing the necessary incantations (SCM_RIGHTS and so on). The other side will then receive them as working file descriptors in a corresponding msghdr struct, although of course the actual numbers of the file descriptors might be different. You can also send process credentials this way; these are an unforgeable proof of the identity of the process sending them, which is useful for various obscure purposes.
Whether you can move higher-level objects depends on whether they are built out of file descriptors and bytes. However, note that you would have to write code to move these things; you wouldn't expect to be able to send them out of the box.
在 Windows 中,文件和套接字句柄可以为同一系统上运行的另一个进程复制,并使用 IPC 传递给该进程。
“数据库连接”是特定于您使用的数据库连接机制的术语。某些“连接”可能可以共享,但这很可能是共享连接字符串。
FTP 连接可以通过复制套接字句柄(如果代码是您的)来共享,或者您可以将 FTP URL 传递给另一个进程。
In windows file and socket handles can be duplicated for another process running on the same system and passed to this process using IPC.
"Database connection" is a term specific to the DB connection mechanism you use. It's possible that some "connections" can be shared, but this will be most likely sharing a connection string.
FTP connections can be shared by duplicating socket handle (if the code is yours) or you can pass the FTP URL to another process.