这段时间回过头看unix高级环境编程,感觉以前不理解的现在有了明显的提升。在第八章的第四节中提到vfork在调用exit之后父进程会导致printf输出出错返回1,做了一个实验,结果显示exit和_exit结果是一样的。除非在子进程中调用函数关闭输出流,才会导致printf返回-1.不是很理解,希望大牛能帮忙给个解答。
实验环境为:CentOS release 6.8 (Final)
内核版本为:Linux 2.6.32-642.el6.x86_64 #1 SMP Tue May 10 17:27:01 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
程序源码为:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
typedef char *P[10] ;
int main ()
{
printf ("hello, world\n");
//P *p;
char * (*p)[10];
FILE *fp;
int fd;
p=calloc(10,sizeof(char *));
//fp=fopen("./1.txt","w+");
if ((*p)[0] == NULL )
printf("p=%p (*p)[0]=%p (*p)[1]=%p (*p)[2]=%p (*p)[3]=%p p[1]=%p sizeof(char *)=[%lu]\n"\
,p, &(*p)[0], &(*p)[1], &(*p)[2], &(*p)[3], p[1],sizeof(char *));
//fd = fileno(fp);
//dup2(fd,STDOUT_FILENO);
free(p);
printf("mytest for fork");
if (vfork()==0)
{
/*chiled*/
fclose(stdout);
exit(0);
}else
{
int i=printf("\nmytest2\n");
exit(i);
}
}