| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 951 人关注过本帖, 1 人收藏
标题:管道 两个子进程通信问题
只看楼主 加入收藏
xbubblex
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2012-7-13
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:5 
管道 两个子进程通信问题
刚开始学c语言
   有个问题想请教大家
   通过管道建立两个子进程,子进程1向子进程2输入一个"Hello" 子进程2向子进程1回复“hELLO”  这个例子怎么实现啊
搜索更多相关主题的帖子: 学c语言 管道 
2012-07-13 21:55
xbubblex
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2012-7-13
收藏
得分:0 
完全没有头绪啊
2012-07-13 22:26
shapoo
Rank: 2
等 级:论坛游民
帖 子:12
专家分:57
注 册:2012-7-13
收藏
得分:20 
程序代码:
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/wait.h>

void read_pipe(int fd)
{
    char message[100];
    read(fd, message, 100);
    printf("read pipe message:%s", message);
}

void write_pipe(int fd)
{
    char *message = "Hello\n";
    write(fd, message, strlen(message) + 1);
}

int main()
{
    int fd[2];
    pid_t pid;
    int stat_val;
    if (pipe(fd))
    {
        printf("create pipe failed!\n");
    }
    pid = fork();
    switch (pid)
    {
    case -1:
        printf("fork error!\n");
        break;
    case 0:
        close(fd[1]);
        read_pipe(fd[0]);
        break;
    default:
        close(fd[0]);
        write_pipe(fd[1]);
        wait(&stat_val);
        break;
    }
    return 0;
}

我的博客: www.shapoo. net  
2012-07-13 22:54
xbubblex
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2012-7-13
收藏
得分:0 
回复 3楼 shapoo
太感谢了  都不知道说什么好了
2012-07-13 23:34
xbubblex
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2012-7-13
收藏
得分:0 
回复 3楼 shapoo
#gcc -o 2 2.c
#./2

编译之后只能看到  read  pipe message:Hello

如何能查询到子进程2 返回给进程1的结果呢?
2012-07-13 23:39
shapoo
Rank: 2
等 级:论坛游民
帖 子:12
专家分:57
注 册:2012-7-13
收藏
得分:0 
程序代码:
#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/wait.h> 

int main()
{
    int fd1[2];
    int fd2[2];
    pid_t pid;
    int stat_val;
    char strMsg[20];
    char strMsgP2C[20]="Hello";
    char strMsgC2P[20]="hELLO";
    if (pipe(fd1))
    {
        printf("create pipe1 failed!\n");
    }
    if (pipe(fd2))
    {
        printf("create pipe1 failed!\n");
    }
    pid = fork();
    switch (pid)
    {
    case -1:        //    error
        printf("fork error!\n");
        break;
    case 0:            //    Child Process
        close(fd1[1]);
        close(fd2[0]);

        memset(strMsg,0,sizeof(strMsg));
        read(fd1[0],strMsg,sizeof(strMsg));
        printf("Child Process Get MSG: %s\n",strMsg);
        write(fd2[1],strMsgC2P,strlen(strMsgC2P));
        break;
    default:        //    Parent Process
        close(fd1[0]);
        close(fd2[1]);

        write(fd1[1],strMsgP2C,strlen(strMsgP2C));
        memset(strMsg,0,sizeof(strMsg));
        read(fd2[0],strMsg,sizeof(strMsg));
        printf("Parent Process Get MSG: %s\n",strMsg);
        wait(&stat_val);
        break;
    }
    return 0;
}


我的博客: www.shapoo. net  
2012-07-14 10:46
快速回复:管道 两个子进程通信问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012663 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved