专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

常用链接

留言簿(28)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

翻开高级unix编程,仔细看了一下管道,并将书中的例子修改并实现。
虽然很简单,确揭示了多进程编程的基础。
用管道非常真是非常的简单。以前只是看了,没有实践!

#include <common.h>

#define MAXLINE 256
int main(int argc, char * argv[])
{
    
int fd[2]; //管道fd
    pid_t pid; //子进程的PID
    char line[MAXLINE];

    
if( (pipe(fd) ) < 0 ) //创建PID,其中fd[0]为读管道,fd[1]为写管道
    {
        cout
<<"pipe error"<<endl;
        exit(
0);
    }


    
if( (pid = fork() )<0//创建子进程
    {
        cout
<<"fork error"<<endl; //一般是进程过多的时候才会出错
        exit(0);
    }

    
//执行fork后,当前进程会得到子进程的pid,而子进程得到的是0,可以通过getppid()取得父进程
    if( pid > 0 )
    
{
        
//父进程向管道写数据
        char buffer[MAXLINE];
        close(fd[
0]);
        cout
<<"input:";
        cin.getline(buffer,MAXLINE);
        write(fd[
1],buffer,strlen(buffer));
    }

    
else
    
{
        
//子进程接收数据
        close(fd[1]);
        
int n = read(fd[0],line,MAXLINE);
        line[n] 
= 0;
        cout
<<"read message:"<<line<<endl;
    }


    
return 0;
}


posted on 2010-12-28 22:51 冬瓜 阅读(3528) 评论(3)  编辑 收藏 引用 所属分类: 转贴

Feedback

# re: 进程间通信:管道 2010-12-30 12:21 dwang
这么也看不出会用了吧  回复  更多评论
  

# re: 进程间通信:管道 2011-03-01 17:24 flagman
在fork子进程之后,子进程似乎不会执行下面的这个分支段;

else
{
//子进程接收数据
close(fd[1]);
int n = read(fd[0],line,MAXLINE);
line[n] = 0;
cout<<"read message:"<<line<<endl;
}

虽然fork()只是执行了建立一个新的task_struct的操作,上面这代码在同步上是不是有些问题?  回复  更多评论
  

# re: 进程间通信:管道 2012-08-04 07:22 lexus
请问这里管道 的作用是什么?  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理