现在的位置: 首页 > 综合 > 正文

应用管道实现父子进程之间的通信

2013年10月09日 ⁄ 综合 ⁄ 共 942字 ⁄ 字号 评论关闭
应用管道实现父子进程之间的通信
最近在学习Linux/Unix的IPC,而通过管道是其中的一种方式。管道的限制在与,它只能实现父子进程间的通信,通常我们通常会创建一个管道,然后fork出一个子进程,在父进程关掉读端(fd[0]),在子进程里关掉写端(fd[1]),然后在父进程的写端(fd[1])写入数据,在子进程中的读端(fd[0])读数据,这样就实现了父子进程间的通信。
实现代码如下:
#include <iostream>
#include "apue.h"
#include "err_msg.h"
using namespace std;

void print(const char * str)
{
	int pid = getpid();
	cout << str << endl;
	cout << "pid = " << pid << endl;
}

int main()
{
	int 	n;
	int 	fd[2];
	pid_t 	pid;
	char 	line[MAXLINE];
	cout << "MAXLINE = " << MAXLINE << endl;
	
	if (pipe(fd) < 0)
	{
		err_sys("pipe error");
	}
	
	if ((pid = fork()) < 0)
	{
		err_sys("fork error");
	}
	else if (pid > 0)   /*parent process*/
	{
		close(fd[0]);
		while (1) 
		{
			cout << "--------------------------------" << endl;
			print((char *)"parent process");
			cout << "write the data to pipe" << endl;
			write(fd[1], "hello world\n", 12);
			cout << "--------------------------------" << endl;
			sleep(10);
		}
		
	}
	else 				/*child process*/
	{
		close(fd[1]);
		while (1) 
		{
			print((char *)"child process");
			cout << "read the data from pipe" << endl;
			n = read(fd[0], line, MAXLINE);
			write(STDOUT_FILENO, line, n);
			sleep(15);
		}
	}
	return 0;
}

抱歉!评论已关闭.