SYSCALL_DEFINE3 在何处定义?

#define SYSCALL_DEFINE3(name, ...)

SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)

#define SYSCALL_DEFINEx(x, sname, ...)                                /
        __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)

#define __SYSCALL_DEFINEx(x, name, ...)                                        /
        asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))

include/linux/syscalls.h, line 228

#define __SYSCALL_DEFINEx
(x
, name
, ...)                                 /

asmlinkage
long sys
##name(__SC_DECL##x(__VA_ARGS__))

#define __SC_DECL3
(t3
, a3
, ...) t3
a3
, __SC_DECL2
(__VA_ARGS__)

所以对函数定义 SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) 就等于

SYSCALL_DEFINEx(3, _##socket, __VA_ARGS__)

= asmlinkage long sys_socket(__SC_DECL3(__VA_ARGS__))

= asmlinkage long sys_socket(int family, __SC_DECL2(__VA_ARGS__))

最终得到

asmlinkage long sys_socket(int family, int type, int protocol)

SYSCALL_DEFINE3 宏定义相关推荐

  1. Linux内核源码中使用宏定义的若干技巧

    在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发: 1. 类型检查 比如module_init的宏定义: 点击(此处)折叠 ...

  2. C++ #define(宏定义)的使用

    C++ 宏定义 #define命令是C++语言中的一个宏定义命令,它用来将一个标识符定义为一个字符串,该标识符被称为宏名,被定义的字符串称为替换文本. 宏定义的一般形式 #define <宏名& ...

  3. 如何用C语言改变宏定义的大小,C语言中宏定义使用的小细节

    C语言中宏定义使用的小细节 #pragma#pragma 预处理指令详解 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#p ...

  4. c 宏定义用法#define

    转自:https://blog.csdn.net/boring_wednesday/article/details/78756696 宏定义 语法     #define name Stuff #de ...

  5. C语言宏定义使用技巧

    写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等.下面列举一些成熟软件中常用得宏定义...... 1,防止一个头文件被重复包含 #ifndef COMDEF_H ...

  6. 【C语言】07-预处理指令;-宏定义

    预处理指令简介; 1,C在对源程序进行编译之前,会对一些特殊的预处理指令作解释,产生一个新的源程序,此过程叫做编译预处理.C在经过编译预处理之后才对新的源码进行通常的编译; 2,预处理以'#'开头,且 ...

  7. 巧用宏定义进行调试 (转)

    巧用宏定义进行调试 在进行程序设计时,有时我们往往不希望借住于调试工具(如:gdb, vc),而以输出调试信息的方式进行调试时,我们就可以借住于强大的宏定义来进行调试.    一.在GCC下的定义方法 ...

  8. python用海伦公式求面积_用带参数的宏定义,通过海伦公式求三角形的面积

    要求: 海伦公式: ,其中 ,a,b,c为三角形的三个边.定义两个带参数的宏,一个用来求p,另一个用来求s 题目分析: 首先,题目要求是通过输入三角形的三条边,输出三角形的面积.因为不是任意的三条边都 ...

  9. iOS 开发 高级:使用 宏定义macros (#,##,...,__VA_ARGS_)

    一直以来用宏定义#define也就是定义一些简单的常量,至多也就是定义一个函数,很少关注宏定义的用法.直到看到这样的代码: [cpp] view plaincopy #define PLAYSOUND ...

最新文章

  1. 机器翻译评测——BLEU算法详解 (新增 在线计算BLEU分值)评估
  2. 七个最流行的Python神经网络库
  3. 一文带你读懂Python的5大特点与8大应用方向!
  4. vue的Virtual Dom实现- snabbdom解密
  5. 【错误记录】Flutter 混合开发报错 ( Android 端与 Flutter 端 EventChannel 初始化顺序错误导致无法通信 | EventChannel 通信流程 )
  6. 声场模型如何区分近场和远场
  7. 国庆七天乐 Day5
  8. 【英语学习】【WOTD】adversary 释义/词源/示例
  9. libcurl 发送邮件_结合MIME C++ library与CURL发送带附件的邮件
  10. HttpClient 教程 (六)
  11. java jni 生成_利用javah技术生成jni接口的详细步骤 | 学步园
  12. spring基础知识(IOC、DI、AOP)
  13. UESTC 1593 老司机破阵 优先队列+双端链表
  14. 大天使之剑服务器维护,大天使之剑部分区服维护公告
  15. 畅言普通话软件测试准确率高吗,畅言普通话测试准确吗?畅言普通话准确度介绍...
  16. Ubuntu 驱动Mecury MW150UH无线网卡总结
  17. 金和C6协同办公中对用户密码的处理
  18. 阿里云服务器安装桌面UI显示黑屏
  19. JS把反斜杠\转换成正斜杠/
  20. C语言手写SDS字符串的实现思路

热门文章

  1. C/C++:实现精灵游戏
  2. 如何设计可靠性UDP传输协议?
  3. 基本尺寸,实际尺寸,作用尺寸,极限尺寸,最大实体尺寸,最小实体尺寸
  4. 【ES知识】ES基础查询语法一览
  5. Ffmpeg报Error initializing filter ‘gltransition‘这个有问题解决方法
  6. Apollo学习(二)appollo安装与部署
  7. python将图片转矩阵
  8. java web全栈_web全栈java开发哪个前景好
  9. Zotero安装使用及上标问题解决
  10. QT运行时问题CreateDC failed