Chinaunix首页 | 论坛 | 博客
  • 博客访问: 686315
  • 博文数量: 152
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1793
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-12 12:26
个人简介

相信自己,只有不想做的,没有做不到的。

文章分类

全部博文(152)

文章存档

2021年(1)

2015年(2)

2014年(74)

2013年(75)

分类: LINUX

2013-12-16 21:44:50

一 无名管道

特点:
1.只能用于亲缘关系间进程通信
2.半双工,有固定的读端(fd[0])和写端(fd[1])
3.管道中的数据,读走之后就不存在于管道中

int pipe(int pipefd[2]);
功能:创建无名管道,获得两个文件描述符(fd[0],fd[1])
返回值:成功返回0,失败返回-1


两个进程间无名管道实现通信

#include
#include
#include
#include

int read_pipe(int fd)
{
 int n;
 char buf[1024];
 
 while(1)
 {
  n = read(fd,buf,sizeof(buf) - 1);
  buf[n] = '\0';

  printf("Read %d bytes: %s.\n",n,buf);

  if(strncmp(buf,"quit",4) == 0)
   break;
 }

 return 0;
}

int write_pipe(int fd)
{
 
 /*
 char buf[] = "hello word";
 sizeof(buf) : 11
 strlen(buf) : 10
 */
 char buf[1024];

 while(1)
 {
  printf(">");
  fgets(buf,sizeof(buf),stdin);
  buf[strlen(buf) - 1] = '\0';

  write(fd,buf,strlen(buf));

 }
}

int main(int argc, const char *argv[])
{
 pid_t pid;
 int fd[2];

 if(pipe(fd) < 0)
 {
  perror("Fail to pipe");
  exit(EXIT_FAILURE);
 }

 if((pid = fork()) < 0)
 {
  perror("fail to fork");
  exit(EXIT_FAILURE);
 }

 if(pid == 0)
 {
  close(fd[1]);
  read_pipe(fd[0]);
 }

 if(pid > 0)
 {
  close(fd[0]);
  write_pipe(fd[1]);
 }
 
 exit(EXIT_SUCCESS);
}

阅读(550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~