例如grep
,如果一个程序当前正在运行,而用户执行另一个实例,那么这两个实例是否共享.text
它们之间的只读部分以节省内存?主要可执行文本的共享是否与共享库类似?
这种行为是否在 Linux 中表现出来?如果是这样,其他Unices 也这样做吗?
如果这不是在 Linux 中完成的,那么实现通常作为共享库并行运行多个实例的可执行文件是否有任何好处,调用的可执行文件只需调用库中的主函数?
sendmsg()函数的函数原型如下:
ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
Run Code Online (Sandbox Code Playgroud)
msghdr 结构是这样的:
struct msghdr {
void *msg_name; /* optional address */
socklen_t msg_namelen; /* size of address */
struct iovec *msg_iov; /* scatter/gather array */
size_t msg_iovlen; /* # elements in msg_iov */
void *msg_control; /* ancillary data, see below */
size_t msg_controllen; /* ancillary data buffer len */
int msg_flags; /* flags on received message */
};
Run Code Online (Sandbox Code Playgroud)
如果我通过 UNIX 域套接字发送一条消息,sendmsg()
其中包含辅助数据msg_control
(例如带有 SCM_RIGHTS 的文件描述符)和常规消息数据msg_iov
,我是否能够msg_iov …