进程退出--- exit() 和 _exit()

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]$ 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值