• 系统调用简单总结


    1.系统调用:在用户态,程序员不能直接调用系统函数,系统调用必须在内核模式下实现。

                   所以在用户态某些C库函数通过汇编指令产生软中断异常,进入内核模式,然后我们就可以将系统调用号和参数传给内核使用系统调用。即系统调用是作为一种异常类型来实现处理的。

    2. 添加新的系统调用

        1)系统调用号:在unistd.h 文件中  #define _NR_XXX(XXX:系统调用名称)   NNN(NNN:系统调用号)

        2)系统调用服务进程:sys_xitongdiaoyongname();

         eg:在/usr/src/linux/kernel/sys.c文件中添加源代码,如下所示: 
      asmlinkage int sys_mycall(int number) 
      
      return number; 
      

        3)在/usr/src/linux/arch/i386/kernel/entry.S 
      该文件中有类似如下的清单: 
      .long SYMBOL_NAME() 
      该清单用来对sys_call_table[]数组进行初始化。该数组包含指向内核中每个系统调用的指针。这样就在数组中增加了新的内核函数的指针。我们在清单最后添加一行: 
      .long SYMBOL_NAME(sys_mycall) 

    3. 使用系统调用的两种方式:

     1)c库中封装了系统调用,通过C库间接调用。

     eg:通过调用C库中printf()函数,去调用系统调用write();

     2) 传递系统调用号,利用syscall()函数(注意该函数为内核提供给用户的一个函数)直接调用;

    eg: 

    int main(void)

    {

       int a=syscall(318,100);//318是系统调用号,100是参数

       printf("%d ",a);

       return 0;

    }

        或者

    #include 
      _syscall1(int,mycall,int,ret) 
      main() 
      
      printf("%d n",mycall(100)); 
      

  • 相关阅读:
    python匿名函数lambda用法
    python递归函数
    python中的全局变量与局部变量
    元组,字典,集合
    WKWebView 与 UIWebView
    JSON数组字典解析
    iOS使用Instruments的工具
    CocoaPods Mac App的安装和使用
    Mac环境下svn的使用(转)
    数据存储-- Core Data的使用(二)
  • 原文地址:https://www.cnblogs.com/happyliuyi/p/5126744.html
Copyright © 2020-2023  润新知