1 分析write在进程间通信的实现过程
在内核中,socket是与文件指针挂钩的,因此就可以通过open、read、write像操作文件一样对socket进行操作;而write的过程相当于socket数据发送的过程。接下来,我们研究socket的数据发送流程。
1、从socket (AF_UNIX, SOCK_STREAM, 0)入手,经过跟踪会调到unix_create函数
static int unix_create(struct net *net, struct socket *sock, int protocol)
{
switch (sock->type) {
case SOCK_STREAM:
sock->ops = &unix_stream_ops;
break;
}
return unix_create1(net, sock) ? 0 : -ENOMEM;
}
下面是socket函数的操作集
staticconst struct proto_ops unix_stream_ops = {
.family = PF_UNIX,
.sendmsg = unix_stream_sendmsg,
.recvmsg = unix_stream_recvmsg,
};
Write操作是通过调用unix_stream_sendmsg来实现的。
1.2 unix_stream_sendmsg函数