linux终端下使用pipe实现父子进程交互
编写程序pp.c,创建一个子进程,通过管道进行通信,要求父进程负责读取文件w.c,将读到内容通过管道传递给子进程,子进程然后将收到的内容,打印输出。假设w.c的目录为/h...
编写程序pp.c,创建一个子进程,通过管道进行通信,要求父进程负责读取文件w.c,将读到内容通过管道传递给子进程,子进程然后将收到的内容,打印输出。假设w.c的目录为/home/w.c,求 大神解答。
展开
1个回答
展开全部
看这个问题好久都没人回答。。。
挺简单的,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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询