读书人

linux停的父进程代码块用了wait()或者

发布时间: 2013-07-09 09:50:47 作者: rapoo

linux下的父进程代码块用了wait()或者sleep()后的奇怪现象,求解决。。

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
main()
{
pid_t pid;
int fp[2];
char nread;
char buf[100];
if(pipe(fp)<0){
printf("pipe error");
exit(1);
}
pid=fork();
if(pid==0){
printf("\n");
close(fp[1]);
sleep(2);
if((nread=read(fp[0],buf,100))>0){
printf("read %d is %s",nread,buf);
}
close(fp[0]);
}
if(pid>0){
printf("hello");
close(fp[0]);
if((write(fp[1],"hello world",10))!=-1){
printf("write to pipe success");
}
close(fp[1]);
wait(NULL);
}
}



这个程序的结果不应该是先打开父进程或者子进程,如果是父进程就先打印hello然后再向管道写入hello world后打印write to....再等待子进程执行并结束吗,如果先打开子进程就打印回车符再睡眠2秒再进入父进程打印hello 和write....之类的

可是我的实际执行结果却是打印回车符,打印read 10 is hello world, 最后才打印hello write to ....
为什么会这样呢,并且如果我把wait(NULL)改成sleep(5)的结果就会是先打印回车符 read 10 is hello world 再等待sleep(5)结束之后一次性打印 hellowrite to....

想不通了,求大神解救。。。。 Linux C
[解决办法]
在每个最后不带\n的printf后面加fflush(stdout);

读书人网 >C语言

热点推荐