红联Linux门户
Linux帮助

Linux内核编程和用户应用程序编程的几点不同之处

发布时间:2007-09-03 00:31:18来源:红联作者:Cbianhe
  在此之前也不清楚linux内核编程跟用户应用程序编程之间有什么不同,正好这几天做了一点linux模块编程,遇到问题请教朋友并查一些资料,感觉对内核编程和用户应用程序编程的几点不同有了一点体会,就写了下来。

  1.linux内核编程和用户应用程序编程最大的不同是,前者是在内核态下运行的,而后者主要在用户态下运行,有时通过一些系统调用切换到内核态下运行,但这时间不会太长。

  2.内核编程引进的头文件都在内核源码的include文件夹下,比如我的debian linux 2.6环境下是:/usr/src/linux/include下,而用户应用程序编程引进的头文件都是从开发环境头文件的include文件夹下,比如我的环境下是:/usr/include下。也就是凡是要include的头文件在内核源码include底下没有的都不能用。

  3.要查询一个函数能否在内核编程中用,可以通过http://lxr-itec.uni-klu.ac.at/linux-2.6.4/ident查(这是针对linux2.6内核,也有针对2.4内核的),如果能查到Defined as a function,那就可以用,否则就不行。

  4.举个简单的例子:当socket编程时,用户在应用程序编程时,基本上都用到socket()函数创建一个socket描述符,include的头文件主要是,这几个头文件在内核源码include下都没有,所有不能用,但内核编程有它自己的一套。内核socket编程时,需要用sock_create()得到一个socket结构体,如果想跟用户应用程序一样用socket描述符来操作socket,可以再用sock_map_fd()新建一个对应的描述符,而且需要时可以通过sockfd_lookup(),实现通过描述符查找对应的socket结构体。其实socket函数内核实现时就是先有sock_create(),再有sock_map_fd()。
文章评论

共有 0 条评论