首页 > 其他 > 详细

exit库函数和_exit系统调用对标准输出的影响

时间:2017-05-16 12:12:52      阅读:350      评论:0      收藏:0      [点我收藏+]
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>

int globvar = 6;
char buf[] = "a write to stdout\n";

int main(void)
{
    int var;
    pid_t pid;
    
    var = 88;
    if(write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)    //write系统调用输出,没有缓冲区
    {
        exit(1);
    }
    printf("before fork!\n");        //标准库函数输出,内容会存到缓冲区内
    
    if((pid = fork()) < 0) {
        perror("fork error!");
        exit(1);
    }else if(pid == 0) {
        globvar++;
        var++;
    }else {
        sleep(2);
    }
    
    printf("pid = %ld, glob = %d, var = %d\n", (long)getpid(), globvar, var);
    
    _exit(0);        //采用_exit系统调用不会flush缓冲区的内容到文件
    //exit(0);        //采用exit库函数在退出之前会将缓冲区的内容flush到文件
}

代码源自APUE

直接输出到屏幕与重定向到文件的输出内容有差别

"before fork!\n"字符串在重定向到文件时会输出两次,一次是父进程的输出,一次是子进程的输出。这是在最后的退出调用exit(0)标准库函数的情况下

在通过系统调用_exit(0)退出进程的时候,标准输出的内容(通过printf标准库函数的输出)不会写入到重定向之后的文件,只有write系统调用写入的字符串

exit库函数和_exit系统调用对标准输出的影响

原文:http://www.cnblogs.com/rocklee25/p/6860432.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!