_syscall*()是什么?
在unistd.h里定义了7个宏,分别是
| _syscall0(type,name) _syscall1(type,name,type1,arg1) _syscall2(type,name,type1,arg1,type2,arg2) _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) |
它们看起来似乎不太像宏,但其实质和
| #define MAXSIZE 100 |
里面的MAXSIZE没有任何区别。
| _syscall1(time_t,time,time_t *,tloc) |
展开后的情形是这样:
| time_t time(time_t * tloc) { long __res; __asm__ volatile("int $0x80" : "=a" (__res) : "0" (13),"b" ((long)(tloc))); do { if ((unsigned long)(__res) >= (unsigned long)(-125)) { errno = -(__res); __res = -1; } return (time_t) (__res); } while (0) ; } |
可以看出,_syscall1(time_