系统调用:
a.系统调用会将处理器从用户态切换到核心态。以便cpu访问到受保护的内核内存。
b.一般系统调用会有一个c语言外壳函数,便于用户使用。一般linux使用的外壳函数为glibc。外壳函数会帮助用户执行一系列系统调用的步骤,复制参数到指定的寄存器,执行中断机器指令(int 0x80),根据系统调用的返回值设置errno的值。
c.在Linux一般惯例中,系统调用调用失败一般返回一个负值,外壳函数将返回值取反,赋值给errno,并返回-1。
d.对errno的解析提供两个函数perror 和 strerror.
#include <stdio.h>
void perror(const char *msg);
#include<string.h>
char *strerror(int errno);
可移植性问题
有些头文件的定义或者源文件的程序段需要某些宏定义来打开,有两种方法来处理此种情况:
a.在程序源码包含任何头文件之前,定义宏,比如
#define _BSD_SOURCE 1
b.还可以使用C编译器的-D选项,
cc -D_BSD_SOURCE prog.c
cc -D_POSIX_C_SOURCE=199506 -D_BSD_SOURCE prog.c