linux 打印函数宏,linux内核中的嵌入式汇编宏函数

在看linux内核代码时,常会遇到诸如:static inline _syscall0(int,fork)这样的函数。经查阅资料,发现该函数是嵌入式汇编宏函数。

linux内核提供了7个非常有用的宏定义,依次是:_syscall0,_syscall1,_syscall2,_syscall3,_syscall4,_syscall5,_syscall6。它们分别用来封装不同数目参数的系统调用,最后的数字表示该宏定义访问需要几个参数的系统调用,如_syscall0用于访问不需要参数的系统调用;_syscall3用于访问需要三个参数的系统调用。

如_syscall0()函数的宏定义原型是:

#define _syscall0(type,name)  \

type name(void)  \

{  \

long __res;  \

__asm__ volatile ("int $0x80"  \         //调用系统中断0x80

:"=a" (__res)  \

:"" (__NR_##name));  \                     //输入为系统中伏安调用号 __NR_name

if (__res >=0)  \                             //如果返回值>=0,则直接返回该值

return (type) __res; \

errno=-__res;\

return -1;}                                   //否则置出错号,并返回-1

__NR_##name是系统调用号,##指的是两次宏展开,即用实际的系统调用名字代替"name",然后再把__NR_...展开。如name==ioctl则为__NR_ioctl

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值