【发布时间】:2013-12-03 08:18:45
【问题描述】:
我想以内核作为客户端,在内核模块和用户应用程序之间建立连接。也就是说,内核会向用户应用发送消息,等待回复,接收回复,然后继续执行。
例如,在内核中我会发送消息然后等待回复。
// inside kernel
nlmsg_unicast();
wait_until_user_reply();
/* process reply */
/* continue execution.. */
在用户内部时,
while (1) {
// inside user
recvmsg();
/* assembly reply.. */
sendmsg();
}
然而,netlink 协议所做的是每次用户发送消息时调用一个回调函数。我想要的是让内核等待用户的回复,然后继续执行。在回调函数内部更新的全局变量的繁忙循环中等待是否可行?我试过了,但我认为这不是一个很好的解决方案。
我可以做类似“睡到回复来”之类的事情吗?我可以让内核休眠吗?
【问题讨论】:
标签: linux sockets linux-kernel client-server netlink