`
gstarwd
  • 浏览: 1491493 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

linux进程的管道通信学习笔记

阅读更多
#include <unistd.h>
#include <sys/types.h>
#include <errno.h>
int main()
{
	int pipe_fd[2];
	pid_t pid;
	char r_buf[100];
	char w_buf[4];
	char* p_wbuf;
	int r_num;
	int cmd;
	
        int global;

	memset(r_buf,0,sizeof(r_buf));
	memset(w_buf,0,sizeof(r_buf));
	p_wbuf=w_buf;
	if(pipe(pipe_fd)<0)
	{
		printf("pipe create error\n");
		return -1;
	}
	
	if((pid=fork())==0)//child process
	{

                 printf("child  processing begin\n");
               // global = pid;
		//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)   );
		//exit(0); put here not functionly as expect why? T_T
 close(pipe_fd[0]);
		sleep(6);
		 printf("child  processing end\n");
		exit(0);
	}
	else if(pid>0)//parent process
	{

                printf("parent  processing begin\n");

	        close(pipe_fd[0]);//first close  read
	        strcpy(w_buf,"111");
	        if(write(pipe_fd[1],w_buf,4)!=-1)
		{
	  		printf("parent write success & over\n");

		}else
		{
			printf("parent write failed\n");
		}
	        close(pipe_fd[1]);//write
		printf("parent close fd[1] over\n");
	        sleep(10);

 		printf("parent  processing  end\n");


	}	
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics