exit()与_exit()的区别

来源:互联网 发布:大纲写作软件 编辑:程序博客网 时间:2024/04/29 00:04

exit()和_exit()的区别:

注:这两个函数作用都是退出一个进程,区别如下:
1)_exit()是一个系统调用函数,exit()是一个标准c库函数;
2)exit()会清空输出缓冲区的缓存,执行标准I/0库的清理关闭操作;
3)exit()会执行调用使用atexit注册的终止处理程序;

注:对于atexit()注册的终止处理程序是先注册后调用,ANSI C规定最多可以注册32个终止处理程序。

验证示例代码:

// demo1.c#include<stdio.h>#include<unistd.h> // _exit()int main(){    printf("hello world");    _exit(0);}root@ubuntu15:code# ./mainroot@ubuntu15:code#
// demo2.c#include<stdio.h>#include<unistd.h> // _exit()int main(){    printf("hello world");    fflush(stdout); // 清空输出缓冲区    _exit(0);}root@ubuntu15:code# ./mainhello worldroot@ubuntu15:code#
// demo3.c#include<stdio.h>#include<unistd.h> // _exit()int main(){    printf("hello world\n"); // 换行带清空输出缓冲区的功能    _exit(0);}root@ubuntu15:code# ./mainhello worldroot@ubuntu15:code#
// demo4.c#include<stdio.h>#include<stdlib.h> // exit()int main(){    printf("hello world");    exit(0);}root@ubuntu15:code# ./mainhello worldroot@ubuntu15:code#
// demo5.c // 观察终止处理程序是先注册后执行#include<stdio.h>#include<stdlib.h> // exit()// int atexit(void (*function)(void));void funcA(void){    printf("I'm A\n");}void funcB(void){    printf("I'm B\n");}void funcC(void){    printf("I'm C\n");}int main(){    atexit(funcA);    atexit(funcB);    atexit(funcC);    exit(0);}root@ubuntu15:code# ./mainI'm CI'm BI'm Aroot@ubuntu15:code#
0 0
原创粉丝点击