Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74756
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 291
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-29 14:47
文章存档

2014年(13)

2013年(15)

我的朋友

分类: C/C++

2013-12-16 11:30:16

管道的创建
int pipe(int filedes[2]);经由参数filedes返回两个文件描述符:filedes[0]为读而打开,filedes[1]为写而打开。

从父进程到子进程之间的通信
#include"ourhdr.h"

int main(void)
{
  int n,fd[2]; 关于fd的值,由于0,1,2已经由内核的shell分配,所以fd[0]至少为3,fd[1]=4;详细内容可看文件共享
  pid_t pid;
  char line[20];

  if(pipe(fd)<0)
    printf("pipe error");
  if((pid=fork())<0){
    perror("fork error");
    exit(1);
  }
else if(pid>0){
   //  sleep(5);
    /*睡眠5秒,等待子进程先运行。
    查看输出,结果子进程仍然输出了父进程写入的数据*/
    /*
    close(fd[0]);
    write(fd[1],"hello world\0\n",13);
    */
    /*子进程写入,父进程读取通过管道*/
    /*疑问?为何父进程无论是写入还是读取,
     * 都能够输出正常呢?*/
    /*read只有正常读取到值才会返回,所以这里不牵扯到系统是先调用父进程还是子进程*/
    close(fd[1]);
    printf("start read\n");
    n=read(fd[0],line,20);
    printf("n[%d]end read\n",n);
    write(STDOUT_FILENO,line,n);
  }
  else{
    /*
    close(fd[1]);
    n=read(fd[0],line,20);

    printf("n[%d],%s\n",n,line);// line输出有异常

    write(STDOUT_FILENO,line,n);
    */
    close(fd[0]);
    printf("start write\n");
    sleep(3);
    //write(fd[1],"hello word\0\n",13);
    write(fd[1]," ",1);//写入空值进行测试
    printf("end write\n");
  }
  exit(0);
}

阅读(1059) | 评论(0) | 转发(0) |
0

上一篇:僵尸进程解析

下一篇:文件描述符

给主人留下些什么吧!~~