zoukankan      html  css  js  c++  java
  • SYSCALL_DEFINE3宏定义的分析

    SYSCALL_DEFINE3分析
    1.SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
    2.#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
    3.#define SYSCALL_DEFINEx(x, sname, ...)
    __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
    4.#define __SYSCALL_DEFINEx(x, name, ...)
    asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
    5. #define __SC_DECL1(t1, a1) t1 a1
    #define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__)
    #define __SC_DECL3(t3, a3, ...) t3 a3, __SC_DECL2(__VA_ARGS__)
    #define __SC_DECL4(t4, a4, ...) t4 a4, __SC_DECL3(__VA_ARGS__)
    #define __SC_DECL5(t5, a5, ...) t5 a5, __SC_DECL4(__VA_ARGS__)
    #define __SC_DECL6(t6, a6, ...) t6 a6, __SC_DECL5(__VA_ARGS__)
    上面四步就是整个SYSCALL_DEFINE3宏定义的每个步骤下面对他们进行组合
    name ...
    socket int, family, int, type, int, protocol
    SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
    等于 SYSCALL_DEFINE3(socket, ...)
    等于 SYSCALL_DEFINEx(3, _socket, int, family, int, type, int, protocol)
    等于 __SYSCALL_DEFINEx(3, _socket,int, family, int, type, int, protocol)
    等于 asmlinkage long sys_socket(__SC_DECL##3(int, family, int, type, int, protocol))
    等于 asmlinkage long sys_socket(__SC_DECL##3(int, family, int, type, int, protocol))
    等于 asmlinkage long sys_socket(__SC_DECL3(int, family, int, type, int, protocol))
    asmlinkage long sys_socket(int family ,__SC_DECL2(int, type, int, protocol))
    asmlinkage long sys_socket(int family ,int type ,__SC_DECL1(int, protocol))
    asmlinkage long sys_socket(int family ,int type ,int protocol)
    这样分解之后就得到了函数
    asmlinkage long sys_socket(int family ,int type ,int protocol)
    备注:__VA_ARGS__:总体来说就是将左边宏中 ... 的内容原样抄写在右边 __VA_ARGS__ 所在的位置。它是一个可变参数的宏,是新的C99规范中新增的,目前似乎只有gcc支持(VC从VC2005开始支持)。要注意的是,printf 的输出格式是括号内左边是字符串,右边是变量,而且右变量与左输出格式是一一对应的。所以在上面那个例子中, __VA_ARGS__只能是一些不含任何变量的字符串常量。因为上面的例子中若__VA_ARGS__含有变量,整个printf的输出与变量便不能一一对应,输出会出错。

  • 相关阅读:
    java实现模拟登陆
    springboot整合kafka(转)
    springboot使用缓存(三)
    springboot使用缓存(二)
    springboot使用缓存(一)
    springboot日期入参出参格式化注解:@DateTimeFormat 和 @JsonFormat (转)
    H5调用android相机拍照
    时间复杂度
    java guide面试突击版
    java面试手册-复制内容
  • 原文地址:https://www.cnblogs.com/longbiao831/p/4556261.html
Copyright © 2011-2022 走看看