glibc
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。
syscall()
syscall() 执行一个系统调用,根据指定的参数number和所有系统调用的汇编语言接口来确定调用哪个系统调用。
例子:获取线程ID,gettid()
#include <sys/syscall.h>
tid = syscall(SYS_gettid);
其中,SYS_gettid的定义为:
#define SYS_gettid __NR_gettid
#define __NR_gettid 224(实际定义在/usr/include/asm/unistd.h)
数字224即为system call number.
双感叹号(!!)的含义
表示进行两次逻辑非操作:
!!(400) = 1
!!(-200) = 1
!!(0) = 0
static_assert
C++0x中引入了static_assert这个关键字,用来做编译期间的断言,因此叫做静态断言。
其语法很简单:static_assert(常量表达式,提示字符串)。
如果第一个参数常量表达式的值为真(true或者非零值),那么static_assert不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该static_