当前位置: 技术问答>linux和unix
还是有关fork的问题,fork在一个函数中调用,我被搞胡涂了
来源: 互联网 发布时间:2015-09-27
本文导语: #include void createprocess(){ int t; printf("123"); t=fork(); if(t!=-1){ if(t==0) printf("b"); ...
#include
void createprocess(){
int t;
printf("123");
t=fork();
if(t!=-1){
if(t==0) printf("b");
if(t>0) printf("a");
}
}
int main(){
createprocess();
}
结果是123a123b
为什么123会打印两次呢?
fork在打印123的语句下面啊,问了老师,他也讲不清楚.
void createprocess(){
int t;
printf("123");
t=fork();
if(t!=-1){
if(t==0) printf("b");
if(t>0) printf("a");
}
}
int main(){
createprocess();
}
结果是123a123b
为什么123会打印两次呢?
fork在打印123的语句下面啊,问了老师,他也讲不清楚.
|
楼主读书似乎不仔细。这样的问题,基本上在书上讲fork的地方,都会说明。
printf出现在fork前,似乎应该出现一次,但由于没有换行符,或者用fflush将缓冲区内容输出,所以在fork时,“123”没有输出,还在缓冲区内,它的内容也被子进程所复制。父进程和子进程的缓冲区内,都有“123”。
printf出现在fork前,似乎应该出现一次,但由于没有换行符,或者用fflush将缓冲区内容输出,所以在fork时,“123”没有输出,还在缓冲区内,它的内容也被子进程所复制。父进程和子进程的缓冲区内,都有“123”。
|
同意 nichotilikai(lk)的话
fork共享内存,包括缓冲区
而缓冲区没有清空啊
在第一个printf后加'n'或用fflush
就不会出现这个现象了
fork共享内存,包括缓冲区
而缓冲区没有清空啊
在第一个printf后加'n'或用fflush
就不会出现这个现象了