我想以内核作为客户端在内核模块和用户应用程序之间建立连接。换句话说,内核将向用户应用程序发送消息,等待回复,接收回复,然后继续执行。
例如,在内核内部我将发送消息然后等待回复。
// inside kernel
nlmsg_unicast();
wait_until_user_reply();
/* process reply */
/* continue execution.. */
在用户内部时,
while (1) {
// inside user
recvmsg();
/* assembly reply.. */
sendmsg();
}
然而,netlink 协议所做的是每次用户发送消息时调用一个回调函数。我想要的是让内核等待用户的回复,然后继续执行。在回调函数内部更新的全局变量的繁忙循环中等待是否可行?我试过了,但我认为这不是一个很好的解决方案。
我可以做类似“睡觉直到回复来”之类的事情吗?我可以让内核休眠吗?