|
下面是linux内核进程通信部分的源代码:
struct msg_msg {
struct list_head m_list;
long m_type;
int m_ts; /* message text size */
struct msg_msgseg* next;
/* the actual message follows immediately */
};
static struct msg_msg* load_msg(void* src, int len)
{
struct msg_msg* msg;
struct msg_msgseg** pseg;
int err;
int alen;
alen = len;
if(alen > DATALEN_MSG)
alen = DATALEN_MSG;
msg = (struct msg_msg *) kmalloc (sizeof(*msg) + alen, GFP_KERNEL);
if(msg==NULL)
return ERR_PTR(-ENOMEM);
msg->next = NULL;
if (copy_from_user(msg+1, src, alen)) {
err = -EFAULT;
}
。。。。。。
}
我不明白的是:
kmalloc分配出一块内存连续空间,msg结构体里面的各数据在这片连续空间里是怎么分布的啊?
msg的值是kmalloc分配的内存连续空间的首地址吧,msg+1也就是这片连续空间的第二个字节了,为什么要把src的内容复制到以msg+1为首地址的内存空间呢?连续空间的第一个字节里面装的又是什么呢?
肯请大虾帮忙解答一下 |
|