博文

目前显示的是标签为“Linux_C”的博文

__copy_user_zeroing

2.6内核和2.4相比,又加入了一个异常修复地址 #define __copy_user_zeroing(to,from,size)               \ do {                                   \    int __d0, __d1, __d2;                       \    __asm__ __volatile__(                       \        "   cmp $7,%0\n"                   \        "   jbe  1f \n"                   \        "   movl %1,%0\n"        ...

关于setjmp和longjmp

前段时间看C专家编程遇到setjmp和longjmp,没有特别在意.这两天看深入理解计算机系统,再次提到setjmp和longjmp.觉得很巧妙,写个小程序测试一下其特性:   1 //longjmp每一次都跳到setjmp的地方,正所谓是保存了当时的堆栈情况   2 //如此看来,setjmp和longjmp的配对,和fork()函数有可比性:   3 //fork()一个函数执行两次,返回两个不同的值,一个是0,一个是subprocess id.   4 //而,longjmp则跳转到setjmp的位置,setjmp返回的值第一次是0,以后就由longjmp的参数决定   5   6 #include <stdio.h>   7 #include <setjmp.h>   8 #include <stdlib.h>   9  10 sigjmp_buf buf;  11  12 void fun()  13 {  14         printf("%s..........",__func__);  15         longjmp(buf, 2);  16         exit(0);  17 }  18 void bar()  19 {  20         printf("%s\n",__func__);  21         exit(0);  22 }  23  24 void main()  25 {  26  27         int n;  ...