return、exit、_Exit、_exit区别(unix系统)
来源:互联网 发布:javascript小游戏源码 编辑:程序博客网 时间:2024/06/08 16:53
return终止一个函数并给该出函数的返回值,如果函数是main函数则终止一个进程并给出进程的返回值。
exit终止一个进程。
**注意:exit函数总是执行一个标准的I/O库的清理和关闭的操作例如对于打开的流调用fclose函数等。
_exit和_Exit终止一个进程立即进入内核。**
#include <stdio.h>#include <stdlib.h>#include <unistd.h>int globvar = 6;char buf[] = "write to Stdout\n";int main(){ pid_t pid; int var = 10; if(write(STDOUT_FILENO,buf,sizeof(buf)-1) != sizeof(buf)-1) perror("write err"); printf("before fork\n"); if((pid = fork()) < 0 ) { perror("fork err"); } if(pid == 0){ globvar++; var++; } else{ //sleep(2); printf("child pid = %ld\n",(long)pid); } printf("pid = %ld,glob = %d,var = %d\n",(long)getpid(),globvar,var); //_Exit(0); return(0);}
return(0)此时与exit(0)等价,程序没有直接交互式的运行输出到终端。./fork_start >test输出定向到test文件。因为交互式的运行带缓冲的IO(printf)输出遇到换行符号就会冲洗到终端,这样就没法区别这几个函数了。定向到test文件,由于没有及时的冲刷缓冲的数据,如果程序退出的方式不一样我们就能看到不同的结果。至于为什么显示2次before fork,因为父子进程都有before fork行缓冲。
#include <stdio.h>#include <stdlib.h>#include <unistd.h>int globvar = 6;char buf[] = "write to Stdout\n";int main(){ pid_t pid; int var = 10; if(write(STDOUT_FILENO,buf,sizeof(buf)-1) != sizeof(buf)-1) perror("write err"); printf("before fork\n"); if((pid = fork()) < 0 ) { perror("fork err"); } if(pid == 0){ globvar++; var++; } else{ //sleep(2); printf("child pid = %ld\n",(long)pid); } printf("pid = %ld,glob = %d,var = %d\n",(long)getpid(),globvar,var); _Exit(0); // return(0);}
_Exit(0);此时与_exit(0)等价,程序没有直接交互式的运行输出到终端。./fork_start >test输出定向到test文件。因为交互式的运行带缓冲的IO(printf)输出遇到换行符号就会冲洗到终端,这样就没法区别这几个函数了。定向到test文件,由于没有及时的冲刷缓冲的数据,如果程序退出的方式不一样我们就能看到不同的结果。 _Exit(0)立即进入内核执行退出,所以除了使用write这个不带缓冲的IO写到test文件,其他的带缓冲的IO的数据都丢失了。
0 0
- return、exit、_Exit、_exit区别(unix系统)
- return,exit,_exit区别
- exit 、_exit、 return的区别
- exit,_exit,return 的区别
- exit、_exit,return的区别
- exit、return、_exit、_Exit这几个函数的区别
- exit、return、_exit、_Exit这几个函数的区别
- 引用 exit、return、_exit、_Exit这几个函数的区别
- exit、return、_exit、_Exit这几个函数的区别
- exit、return、_exit、_Exit这几个函数的区别
- exit、return、_exit、_Exit这几个函数的区别
- exit、return、_exit、_Exit这几个函数的区别
- return()、exit()、_exit()、aboart()函数区别
- exit() _exit() 和 return() 的区别
- exit()、_exit()和return()的区别
- exit(),_exit(),return,abort()函数的区别
- return、exit和_exit的区别+atexit
- C语言中_exit()、exit()、return区别
- Codeforces 507C Guess Your Way Out!【思维】
- IMWeb-FinalTeamWork
- javascript深入理解闭包
- 权限管理
- JSONP 全面分析
- return、exit、_Exit、_exit区别(unix系统)
- 利用hash表的实例
- lattice 包中的直方图绘制
- 删除字符串中的html标签及空格空行
- 剑指offer-从尾到头打印链表
- js事件之event.preventDefault()与event.stopPropagation()用法区别
- [Language]Python中的注释
- SpringTask任务案例源码实现
- 打补丁式的移植U-Boot