当前位置: 技术问答>linux和unix
fork()的疑问
来源: 互联网 发布时间:2016-04-05
本文导语: 学习fork随意写了一段代码,看到结果懵了。。 求高人指点。。 int main(){ FILE* fp; fp = fopen("./temp.txt","a+"); char* t = "123456n"; fputs(t,fp); pid_t pid; pid = fork(); if(pid == 0){ char* ttt = "6543"; ...
学习fork随意写了一段代码,看到结果懵了。。
求高人指点。。
int main(){
FILE* fp;
fp = fopen("./temp.txt","a+");
char* t = "123456n";
fputs(t,fp);
pid_t pid;
pid = fork();
if(pid == 0){
char* ttt = "6543";
fputs(ttt,fp);
}else{
char * tt = "7890";
fputs(tt,fp);
}
fclose(fp);
return 0;
}
为啥写到文件中的结果会是
123456
6543
123456
7890
123456怎么被写了两次啊?
求高人指点。。
int main(){
FILE* fp;
fp = fopen("./temp.txt","a+");
char* t = "123456n";
fputs(t,fp);
pid_t pid;
pid = fork();
if(pid == 0){
char* ttt = "6543";
fputs(ttt,fp);
}else{
char * tt = "7890";
fputs(tt,fp);
}
fclose(fp);
return 0;
}
为啥写到文件中的结果会是
123456
6543
123456
7890
123456怎么被写了两次啊?
|
这个问题很有意思啊。
fputs(t,fp);之后,进程的IO写缓冲里是"123456n"
fork之后,子进程的IO写缓冲复制了父进程的IO写缓冲,也是"123456n"
最后父子进程都把缓冲的东西往文件上写后,就写了2个"123456n"
fork之前fflush,可以解决。
fputs(t,fp);之后,进程的IO写缓冲里是"123456n"
fork之后,子进程的IO写缓冲复制了父进程的IO写缓冲,也是"123456n"
最后父子进程都把缓冲的东西往文件上写后,就写了2个"123456n"
fork之前fflush,可以解决。
|
这应该是缓冲模式惹的祸吧,
你 在输入前fflush一下 看能否解决
你 在输入前fflush一下 看能否解决