首页 > 代码库 > exit库函数和_exit系统调用对标准输出的影响
exit库函数和_exit系统调用对标准输出的影响
#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系统调用对标准输出的影响
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。