exit() 和 _exit() 的区别
void exit(int value)
是标准库函数,在头文件 stdlib.h 中定义。具有刷新 I/O 缓冲区的作用。他的参数 value 是返回给父进程的数据(低 8 位有效)。
void _exit(int value)
是系统调用函数,在头文件 unistd.h 中定义。没有刷新 I/O 缓冲区的作用。他的参数 value 也是返回给父进程的数据(低 8 位有效)。
代码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
/* 注意字符串没有换行符,否则会自动刷新缓冲区 */
printf("Heeeeeeeeeeello woooooooooooooorld!");
/* 调用系统函数退出进程 */
_exit(0);
/* 调用库函数退出进程 */
//exit(0);
while(1);
return 0;
}
[lingyun@manjaro study]$ gcc study.c
[lingyun@manjaro study]$ ./a.out
[lingyun@manjaro study]$
可见没有任何输出,因为 I/O 缓冲区没有被刷新。如果把 _exit(0)注释掉,解注释 exit(0) 的话就会有输出,因为 exit() 有刷新 I/O 缓冲区的作用。如下:
[lingyun@manjaro study]$ gcc study.c
[lingyun@manjaro study]$ ./a.out
Heeeeeeeeeeello woooooooooooooorld![lingyun@manjaro study]$