linux终端下使用pipe实现父子进程交互

编写程序pp.c,创建一个子进程,通过管道进行通信,要求父进程负责读取文件w.c,将读到内容通过管道传递给子进程,子进程然后将收到的内容,打印输出。假设w.c的目录为/h... 编写程序pp.c,创建一个子进程,通过管道进行通信,要求父进程负责读取文件w.c,将读到内容通过管道传递给子进程,子进程然后将收到的内容,打印输出。假设w.c的目录为/home/w.c,求 大神解答。 展开
 我来答
马三小伙儿
推荐于2016-11-28 · TA获得超过642个赞
知道小有建树答主
回答量:808
采纳率:0%
帮助的人:683万
展开全部

看这个问题好久都没人回答。。。

挺简单的,fork一子一父进程,父进程循环读入文件内容,并写进道管道里面,子进程循环从管道接收然后打印出来。

撸码辛苦,望采纳。

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
int  main()
{
pid_t result;
int n,num;
int pipe_fd[2];
int fd;
char buf1[100],buf2[100];
memset(buf1,0,sizeof(buf1));
memset(buf2,0,sizeof(buf2));
fd = open("/home/w.c",O_RDONLY);
if(pipe(pipe_fd)<0)
{
printf("error!\n");
return -1;
}
result=fork();
if(result<0)
{
printf("error!\n");
exit(0);
}
else if(result==0)
{
close(pipe_fd[1]);
while((n =read(pipe_fd[0],buf1,99))>0)
{
buf1[n] = '\0';
printf("%s",buf1);
memset(buf1,0,sizeof(buf1));
}
}
else
{
close(pipe_fd[0]);
while((num = read(fd,buf2,99)) >0){
write(pipe_fd[1],buf2,strlen(buf2));
}
waitpid(result,NULL,0);
}
close(pipe_fd[1]);
close(pipe_fd[0]);
close(fd);

return 0;
}
追问

哥们,我用的是虚拟机,你的程序可以编译,但是一直没结果啊◑▂◐
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式