欢迎来到天天文库
浏览记录
ID:48535597
大小:16.83 KB
页数:2页
时间:2020-01-26
《C语言中exit函数的使用.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、exit()结束当前进程/当前程序/,在整个程序中,只要调用exit,就结束。 return()是当前函数返回,当然如果是在主函数main,自然也就结束当前进程了,如果不是,那就是退回上一层调用。在多个进程时.如果有时要检测上进程是否正常退出的.就要用到上个进程的返回值.. exit(1)表示进程正常退出.返回1; exit(0)表示进程非正常退出.返回0. 进程环境与进程控制(1):进程的开始与终止 1.进程的开始: C程序是从main函数开始执行,原型如下: intmain(intargc,char*argv[]); 通常main的返回值是
2、int型,正确返回0. 如果main的返回值为void或者无,某些编译器会给出警告,此时main的返回值通常是0. 关于main的命令行参数不做过多解释,以下面的程序展示一下:以下是代码片段: #include intmain(intargc,char*argv[]) { inti; for(i=0;i3、pthreade_exit 异常中指分为:abort,SIGNAL,线程响应取消 主要说一下正常终止的前4种,即exit系列函数.以下是代码片段:#include voidexit(intstatus); void_Exit(intstatus); #include void_exit(intstatus); 以上3个函数的区别是: exit()(或return0)会调用终止处理程序和用户空间的标准I/O清理程序(如fclose),_exit和_Exit不调用而直接由内核接管进行清理. 因此,在main函数中exit(0)等价于return04、. 3.atexit终止处理程序: ISOC规定,一个进程最对可登记32个终止处理函数,这些函数由exit按登记相反的顺序自动调用.如果同一函数登记多次,也会被调用多次. 原型如下: #include intatexit(void(*func)(void)); 其中参数是一个函数指针,指向终止处理函数,该函数无参无返回值. 以下面的程序为例:以下是代码片段: #include staticvoidmyexit1() { printf("firstexithandler"); } staticvoidmyexit2() { pri5、ntf("secondexithandler"); } intmain() { if(atexit(my_exit2)!=0) printf("can'tregistermy_exit2"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); printf("mainisdone"); return0; } 运行结果:以下是代码片段: $.6、/a.out mainisdone firstexithandler firstexithandler secondexithandler运行结果: $./a.outarg1arg2arg3 argv[0]:./a.out argv[1]:arg1 argv[2]:arg2 argv[3]:arg3
3、pthreade_exit 异常中指分为:abort,SIGNAL,线程响应取消 主要说一下正常终止的前4种,即exit系列函数.以下是代码片段:#include voidexit(intstatus); void_Exit(intstatus); #include void_exit(intstatus); 以上3个函数的区别是: exit()(或return0)会调用终止处理程序和用户空间的标准I/O清理程序(如fclose),_exit和_Exit不调用而直接由内核接管进行清理. 因此,在main函数中exit(0)等价于return0
4、. 3.atexit终止处理程序: ISOC规定,一个进程最对可登记32个终止处理函数,这些函数由exit按登记相反的顺序自动调用.如果同一函数登记多次,也会被调用多次. 原型如下: #include intatexit(void(*func)(void)); 其中参数是一个函数指针,指向终止处理函数,该函数无参无返回值. 以下面的程序为例:以下是代码片段: #include staticvoidmyexit1() { printf("firstexithandler"); } staticvoidmyexit2() { pri
5、ntf("secondexithandler"); } intmain() { if(atexit(my_exit2)!=0) printf("can'tregistermy_exit2"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); if(atexit(my_exit1)!=0) printf("can'tregistermy_exit1"); printf("mainisdone"); return0; } 运行结果:以下是代码片段: $.
6、/a.out mainisdone firstexithandler firstexithandler secondexithandler运行结果: $./a.outarg1arg2arg3 argv[0]:./a.out argv[1]:arg1 argv[2]:arg2 argv[3]:arg3
此文档下载收益归作者所有