Chinaunix首页 | 论坛 | 博客
  • 博客访问: 43274
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-08 18:03
文章分类

全部博文(11)

文章存档

2017年(8)

2016年(3)

我的朋友
最近访客

分类: LINUX

2017-05-02 17:47:50

有时候我们希望在内核中调用用户空间的应用来帮助我们完成某些工作,可以通过call_usermodehelper来实现。此方法具体原理不做过多解释,用法基本等同于execve。

示例:

点击(此处)折叠或打开

  1. #include <linux/kmod.h>


  2. /**
  3.   * @brief 需要注意的是,要把需要传入的参数
  4.   * 作为一个字符串来写入,当分开时,则不成功。
  5.   * 可以通过调用sh来实现任意功能
  6.   */
  7. int hal_env_get(char *name, char *env)
  8. {
  9.     char buf[128];
  10.     char *argv[] = {"/bin/sh", "-c", buf, NULL};
  11.     char *envp[] = {"HOME=/", NULL};
  12.     struct file *filp = NULL;
  13.     mm_segment_t old_fs;
  14.     char *p = NULL;
  15.     
  16.     sprintf(buf, "fw_printenv %s > /tmp/fw_env.txt", name);
  17.     call_usermodehelper("/bin/sh", argv, envp, UMH_WAIT_PROC);
  18.     
  19.     filp = filp_open("/tmp/fw_env.txt", O_RDONLY, 0);
  20.     old_fs = get_fs();
  21.     set_fs(get_ds());
  22.     filp->f_op->read(filp, buf, 128, &filp->f_pos);
  23.     p = strstr(buf, "=");
  24.     strcpy(env, ++p);
  25.     
  26.     return 0;
  27. }

阅读(1817) | 评论(0) | 转发(0) |
0

上一篇:svn 操作

下一篇:linux 与 sysrq

给主人留下些什么吧!~~