郑州网站制作网页,网站优化我自己可以做吗,开发一款交友app要多少钱,wordpress 注册条件Linux进程间通讯的方式有很多种#xff0c;这里介绍一种通过消息队列的方式来实现kernel与APP之间的消息收发实现方式#xff0c;这种方式特别适用于#xff0c;kernel中发送消息#xff0c;应用层收取消息。
消息队列设备驱动
该方法的设计思路即是创建一个消息队列的设…Linux进程间通讯的方式有很多种这里介绍一种通过消息队列的方式来实现kernel与APP之间的消息收发实现方式这种方式特别适用于kernel中发送消息应用层收取消息。
消息队列设备驱动
该方法的设计思路即是创建一个消息队列的设备应用层通过该设备读取消息队列(通过一个线程)
static const struct file_operations com_kumsgq_fileops {.read com_kumsgq_read,.poll com_kumsgq_poll,.release com_kumsgq_release,
};int com_kumsgq_newfd(struct kumsgq *msgq, int flags)
{int ret, fd;struct kumsgfile *msgfile;if (((flags O_ACCMODE) ! O_RDONLY)|| (flags ~(O_ACCMODE | O_NONBLOCK | O_CLOEXEC)))return -EINVAL;msgfile kzalloc(sizeof(struct kumsgfile), GFP_KERNEL);if (!msgfile)return -ENOMEM;msgfile-msgq msgq;INIT_LIST_HEAD(msgfile-messages);spin_lock_init(msgfile-messages_lock);ret get_unused_fd_flags(O_RDWR | (flags O_CLOEXEC));if (ret 0)goto err_free_msgfile;fd ret;msgfile-file anon_inode_getfile([com_kumsgq], com_kumsgq_fileops,msgfile, flags);if (IS_ERR(msgfile-file)) {ret PTR_ERR(msgfile-file);goto err_put_fd;}fd_install(fd, msgfile-file);mutex_lock(msgq-files_lock);list_add(msgfile-list, msgq-kumsgfiles);com_kumsgq_get(msgq);mutex_unlock(msgq-files_lock);return fd;err_put_fd:put_unused_fd(fd);
err_free_msgfile:kfree(msgfile);return ret;
}
驱动层插入消息到消息队列中应用层创建一个线程从消息队列设备中读取消息。