很简单的两个小程序。第一个程序是子进程调用execlp()打开第二个程序。父进程经过pipe()获取子进程的输出数据。
第二个程序是每秒printf()一句话。
需求是程序2每printf()一次,父进程就实时打印一句。
但现在结果是,父进程只能等程序2运行结束才能获取到管道的数据。
int main()
{
char buffer[1024]={0};
int len;
int pfd[2];
pid_t pid;
if(pipe(pfd)<0)
return -1;
fcntl(pfd[0], F_SETFL, O_NONBLOCK );
fcntl(pfd[1], F_SETFL, O_NONBLOCK );
pid =fork();
if(pid <0)
{
return -1;
}
else if(pid== 0)
{
dup2(pfd[1],STDOUT_FILENO);
close(pfd[0]);
close(pfd[1]);
execlp("./test4.out" ,"",NULL);
exit(0);
}
close(pfd[1]);
while(1)
{
len=read(pfd[0],buffer,1023);
buffer[len]=0;
printf("len=%d\n %s\n",len,buffer);
sleep(1);
}
return 0;
}
int main(int argc,char **argv)
{
int i=0;
while(i<10)
{
printf("i=%d\n",i++);
sleep(1);
}
}