www.pudn.com > pthread_examples.rar > piperead.c


 /************** 
 * readtest.c * 
 **************/ 
#include  
#include  
#include  
#include  
 
main() 
{ 
	int pipe_fd[2];   /*定义管道文件描述符*/ 
	pid_t pid; 
	char r_buf[100];  /*管道读缓冲区*/ 
	char w_buf[4];    /*管道写缓冲区*/ 
	char* p_wbuf; 
	int r_num; 
	int cmd; 
	 
	memset(r_buf, 0, sizeof(r_buf)); 
	memset(w_buf, 0, sizeof(w_buf)); 
	 
	p_wbuf = w_buf; 
	 
	/*建立管道*/ 
	/*pipe_fd[0]用于读数据,是管道读端*/ 
	/*pipe_fd[1]用于写数据,是管道写端*/ 
	if(pipe(pipe_fd)<0) 
	{ 
		printf("pipe create error\n"); 
		return -1; 
	} 
 
	/*管道用于两个进程之间的通信*/ 
	if((pid = fork()) == 0)  /*pid == 0表示返回的父进程*/ 
	{ 
		printf("\n"); 
		close(pipe_fd[1]); 
		sleep(3);/*确保父进程关闭写端*/ 
	    r_num = read(pipe_fd[0], r_buf, 100); 
		printf("read num is %d,  the data read from the pipe is %d\n", r_num, atoi(r_buf)); 
		 
		close(pipe_fd[0]); 
 
		printf("pid = %d\n", getpid()); 
 
		exit(0); 
	} 
	else if(pid > 0) 
	{ 
		close(pipe_fd[0]);//read 
		strcpy(w_buf, "111"); 
		if(write(pipe_fd[1], w_buf, 4) != -1) 
		{ 
			printf("parent write over\n"); 
		} 
		close(pipe_fd[1]);//write 
		printf("parent close fd[1] over\n"); 
		sleep(10); 
		printf("pid = %d\n", getpid()); 
		exit(0); 
	}	 
}