首页 > 其他 > 详细

共享内存:全双工匿名管道

时间:2015-08-09 22:36:47      阅读:318      评论:0      收藏:0      [点我收藏+]
//main.cpp
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <signal.h>
using namespace std;
//两个进程共享驻留在内核中的信息,每次访问共享信息的操作就涉及系统调用。
 void EXIT(int arg)
{
	cout<<"SIGINT "<<"is quit"<<endl;
	exit(0);
}
int Write(int fd,const char *buff,int n)
{
	ssize_t count = 0;
	if((count=write(fd,buff,n))==-1)
	{
		cout<<"write error!!!"<<endl;
		return -1;
	}
	return count;
}
int Read(int fd,char *buff,int n)
{
	ssize_t count = 0;
	if((count=read(fd,buff,n))==-1)
	{
		cout<<"read error!!!"<<endl;
		return -1;
	}
	return count;
}
int main()
{
	int fd[2],pd[2];
	pipe(fd);	
	pipe(pd);
	signal(SIGINT,EXIT);
	pid_t id;
	if((id=fork())==0)
	{
		close(fd[0]);
		close(pd[1]);
		char buff[255];
		memset(buff,0,sizeof(buff));
		
		while(1)
		{
		Write(fd[1],"I am child process!",20);
		Read(pd[0],buff,sizeof(buff));		
		cout<<buff<<endl;
		sleep(1);
		}
	}
	else if(id>0)
	{
		close(pd[0]);
		close(fd[1]);
		char buff[255];
		memset(buff,0,sizeof(buff));
		while(1)
		{
		Read(fd[0],buff,sizeof(buff));		
		cout<<buff<<endl;
    Write(pd[1],"hello child",11);
		}
	}
	else
	{
		cout<<"fork() error!!"<<endl;
	}	
	return 0;
}

Makefile:

OUT=a.out
MAINCPP=main.cpp
MAINO=main.o
CC=g++

$(OUT):$(MAINO)
	$(CC) -o $@ $^
$(MAINO):$(MAINCPP)
	$(CC) -c $<

.PHONY:clean
clean:
	rm -rf $(OUT) $(MAINO)


版权声明:本文为博主原创文章,未经博主允许不得转载。

共享内存:全双工匿名管道

原文:http://blog.csdn.net/liuhuiyan_2014/article/details/47380235

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!