为了方便应用程序使用netlink接口,一个叫libnl库被开发.
1 下载libnl2 
http://packages.ubuntu.com/oneiric/libnl2
2 下载libnl2-dev
http://packages.ubuntu.com/precise/libnl2-dev
3 先安装libnl2 在安装libnl2-dev
应用层代码
#include <stdio.h>
#include <stdlib.h>
#include <netlink/netlink.h>
#define MY_MSG_TYPE (0x10 + 2)  // + 2 is arbitrary but is the same for kern/usr
int
main(int argc, char *argv[])
{
struct nl_sock *nls;
char msg[] = { 0xde, 0xad, 0xbe, 0xef, 0x90, 0x0d, 0xbe, 0xef };
int ret;
nls = nl_socket_alloc();
if (!nls) {
printf("bad nl_socket_alloc\n");
return EXIT_FAILURE;
}
ret = nl_connect(nls, NETLINK_USERSOCK);
if (ret < 0) {
nl_perror(ret, "nl_connect");
nl_socket_free(nls);
return EXIT_FAILURE;
}
ret = nl_send_simple(nls, MY_MSG_TYPE, 0, msg, sizeof(msg));
if (ret < 0) {
nl_perror(ret, "nl_send_simple");
nl_close(nls);
nl_socket_free(nls);
return EXIT_FAILURE;
} else {
printf("sent %d bytes\n", ret);
}
nl_close(nls);
nl_socket_free(nls);
return EXIT_SUCCESS;
}
内核代码
#include <linux/kernel.h>
#include <linux/module.h>
#include <net/sock.h>
#include <net/netlink.h>
#define MY_MSG_TYPE (0x10 + 2)  // + 2 is arbitrary. same value for kern/usr
static struct sock *my_nl_sock;
DEFINE_MUTEX(my_mutex);
static int
my_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
{
int type;
char *data;
type = nlh->nlmsg_type;
if (type != MY_MSG_TYPE) {
printk("%s: expect %#x got %#x\n", __func__, MY_MSG_TYPE, type);
return -EINVAL;
}
data = NLMSG_DATA(nlh);
printk("%s: x x x x x x x x\n", __func__,
data[0], data[1], data[2], data[3],
data[4], data[5], data[6], data[7]);
return 0;
}
static void
my_nl_rcv_msg(struct sk_buff *skb)
{
mutex_lock(&my_mutex);
netlink_rcv_skb(skb, &my_rcv_msg);
mutex_unlock(&my_mutex);
}
static int
my_init(void)
{
my_nl_sock = netlink_kernel_create(&init_net, NETLINK_USERSOCK, 0,
my_nl_rcv_msg, NULL, THIS_MODULE);
if (!my_nl_sock) {
printk(KERN_ERR "%s: receive handler registration failed\n", __func__);
return -ENOMEM;
}
return 0;
}
static void
my_exit(void)
{
if (my_nl_sock) {
netlink_kernel_release(my_nl_sock);
}
}
module_init(my_init);
module_exit(my_exit);
系统:ubuntu 10.04 ,内核: linux-2.6.38
编译应用层代码需要加入动态链接库 /usr/lib/libnl.so
即sudo gcc -o 1 1.c /usr/lib/libnl.so

转载于:https://www.cnblogs.com/kungfupanda/archive/2013/01/11/2856973.html

用户进程与内核进程通信netlink实例相关推荐

  1. 用户进程与内核进程是一一对应的吗_用户线程、内核线程和轻量级进程

    这一篇再继续就线程进行一些更深层次的研究 线程所需的资源 进程中各个线程共享代码.数据和文件等资源,记录线程运行状态的空间(TCB)每个线程单独有一个 每个进程都需要它自己私有的线程控制块(TCB) ...

  2. 双进程有名管道通信应用实例

    更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 要求: p1和p2两个进程通信,用有名管道实现 需要两个管道文件 第一个 ...

  3. 双进程无名管道通信应用实例

    更多资料请点击:我的目录 本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢. 要求: ①用pipe产生一个无名管道之后,再产生两个子进程A,B ②子进 ...

  4. Linux下内核进程、用户进程和轻量级进程(LWP)的理解

    区别和联系 我们经常提到线程.线程组.内核进程.用户进程.轻量级进程等词汇,那么他们之间有什么区别和联系呢? 首先,我们需要明确一点,Linux下并没有真正意义上的线程,甚至可以说没有进程这个概念,L ...

  5. oracle实例包括用户进程吗,ORACLE实例和ORACLE数据库详解(三)

    e.PMON:负责在一个Oracle进程失败时清理资源. 主要用于清除失效的用户进程,释放用户进程所用的资源.如PMON将回滚未提交的工作,释放锁,释放分配给失败进程的SGA资源. f.CKPT 同步 ...

  6. Linux 线程与进程,以及通信

    http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-i ...

  7. linux下TCP通信简单实例

    linux下TCP通信简单实例 基于TCP(面向连接)的socket编程,分为服务器端和客户端 服务器端的流程如下: (1)创建套接字(socket) (2)将套接字绑定到一个本地地址和端口上(bin ...

  8. linux内核打开文件数,放开Linux内核对用户进程可打开文件数和TCP连接的限制

    一. 检查linux内核 uname -a lsb_release -a 二.用户进程可打开文件数限制 1)vim /etc/security/limits.conf *       -      n ...

  9. python之并发编程-进程之间的通信

    进程之间的通信 互斥锁 进程之间数据不共享,但共享同一套文件系统,或同一个打印终端是没有问题的.但共享导致了竞争,若不加以控制就会造成错乱.如下: from multiprocessing impor ...

最新文章

  1. 设计模式-备忘录模式
  2. 洛谷P1730最小密度路径
  3. 2013年展望:大数据发展十大趋势分析
  4. SQL日常维护的语句
  5. 开发函数计算的正确姿势——网页截图服务
  6. popupTheme和theme
  7. 欧盟物联网推动措施重点与趋势观察
  8. 在SQL Server 2000里设置和使用数据库复制
  9. 存储技术对比:NVMe与SATA孰强孰弱?
  10. linux用shell奇数打印星号,shell 打印偶数行-奇数行 ,打印行号
  11. C语言编程 | 转义字符
  12. SecureCRT调整字体大小
  13. 快递物流查询,教你自动查询并识别所有快递是否签收、退回
  14. python汉字转换拼音
  15. e盘不见了怎么恢复?可以这样找回!
  16. windows录屏html文件,windows怎么录屏带声音,简单高效的两种录制法
  17. 2021年:Amazon最新的领导力原则(16条)
  18. 网站安全检测被 提示该网站内容被禁止访问
  19. 前进的路上,我们永不止步
  20. java服务器推送消息技术

热门文章

  1. Python 非空即真、列表生成式、三元表达式 day3
  2. Abaqus中施加移动车辆荷载(待整理)
  3. wpf中xaml的类型转换器与标记扩展
  4. 二叉树的建立和遍历的各种问题
  5. MES系统实施4大关键点,您都知道吗?
  6. WordPress中.user.ini 权限问题
  7. HTML-参考手册: HTTP 方法:GET 对比 POST
  8. windows server 2003 AD
  9. 30个创意出色的非常实用的jquery框架插件-(视觉大背景,瀑布流效果)
  10. ef 单表一对多集合查询_FILTER函数你用过吗?一对多查询与自动筛选,用它都能轻松搞定...