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的输出与变量便不能一一对应,输出会出错。

  • 相关阅读:
    swift判断是不是刘海屏
    swift 获取缓存 删除缓存
    iOS推送接入 获取devicetoken 证书报错解决方法:Code=3000 "未找到应用程序的“aps-environment”的授权字符串" 解决办法
    iOS 判断设备网络是否使用代理
    iOS接入阿里云一键登录,号码认证
    python代码实现回归分析--线性回归
    【优博微展2019】王景璟:异构信息网络协同优化基础理论和应用 开题报告-毕业答辩
    摘要与引言基本要求1
    深度学习理论与架构最新进展综述论文,66页pdf,333篇参考文献
    论文引言的逻辑结构
  • 原文地址:https://www.cnblogs.com/longbiao831/p/4556261.html
Copyright © 2011-2022 走看看