Linux下进程间使用管道通信

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <string.h>

//父进程
void pProc(int fd0,int fd1)
{
	char buf[513];
	int len = 0;
	int i;
	
	printf("> My pid is %d,my parent is %d.\n",getpid(),getppid());
	do
	{
		len = read(fd0,buf,sizeof(buf) - 1);
		buf[len] = 0;//结束字符串
		printf("> %s",buf);
	}while(len);
	close(fd0);
	printf("\n> Parent exited\n");
}

//子进程
void cProc(int fd0,int fd1)
{
	char buf[513];
	int len;
	
	sprintf(buf,"My pid is %d,my parent is %d.\n",getpid(),getppid());
	do
	{
		len = strlen(buf);
		write(fd1,buf,len + 1);//传输len+1长度以便把字符串结束符发送过去
		//延时1ms以等待父进程输出
		usleep(100);
		printf(">> ");
	}while(fgets(buf,sizeof(buf)-1,stdin));
	close(fd1);
	printf("\n>> Child exited\n");
}

int main(int argc,char *argv[])
{
	int fd_p2c[2] = {0};
	int fd_c2p[2] = {0};
	int pid;

	if (pipe(fd_p2c) < 0)
	{
		perror("Pipe fd_p2c create fail.\n");
		return -1;
	}
	if (pipe(fd_c2p) < 0)
	{
		perror("Pipe fd_c2p create fail.\n");
		return -1;
	}
	
	pid = fork();
	
	if(pid == 0)
	{
		//关闭不用的文件描述符
		close(fd_p2c[1]);
		close(fd_c2p[0]);
		cProc(fd_p2c[0],fd_c2p[1]);
	}
	else if(pid < 0)
	{
		perror("Child process create fail.");
		return -2;
	}
	else
	{
		//关闭不用的文件描述符
		close(fd_p2c[0]);
		close(fd_c2p[1]);
		pProc(fd_c2p[0],fd_p2c[1]);
	}
	
	return 0;
}

转载于:https://my.oschina.net/IMLYC/blog/134963

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值