免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1720 | 回复: 12
打印 上一主题 下一主题

有关管道的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-04 10:59 |只看该作者 |倒序浏览
hp_unix下,在main里,fork了一个子进程process1(相当于调度进程),子进程的作用是启动其他的子进程process2。我想在父进程中收集process2的标准输出,怎么办呢?(下面的例子没有对错误进行判断)
int main()
{
    int fd[2];
    pid_t childpid;
    char buf[4096];
   
    if(pipe(fd) < 0)
            printf("error\n";

    if((childpid=fork())==0)
    {
         for(int n=0;n<10;n++)
         {   
            //这里想把crh1得标准输出到缓冲区
            execl("/tmp/crh1","crh1",n,(char *) 0);
            perror("exec is faild";
         }   
    }
    else
    {
              while(1)
              {
                   //这里从缓冲区得到子进程的标准输出,写入文件中
              }
    }

    return 0;
}


高手帮忙,多谢

论坛徽章:
0
2 [报告]
发表于 2005-07-04 11:09 |只看该作者

有关管道的问题

就用管道好了

论坛徽章:
0
3 [报告]
发表于 2005-07-04 11:30 |只看该作者

有关管道的问题

怎么用呢,请指教。谢谢

论坛徽章:
0
4 [报告]
发表于 2005-07-04 11:42 |只看该作者

有关管道的问题

命名管道比较简单。对process2进行输出重定向。
man mknod
man open
man dup
man dup2
man close
man unlink

论坛徽章:
0
5 [报告]
发表于 2005-07-04 13:40 |只看该作者

有关管道的问题

有没有例子给我一个啊,谢谢了

论坛徽章:
0
6 [报告]
发表于 2005-07-04 14:53 |只看该作者

有关管道的问题

那位老大能帮帮我啊,多谢

论坛徽章:
0
7 [报告]
发表于 2005-07-04 15:50 |只看该作者

有关管道的问题

大概结构

  1. #include <sys/types.h>;
  2. #include <unistd.h>;
  3. #include <stdio.h>;
  4. int main()
  5. {
  6.    int fd[2];
  7.    pid_t childpid;
  8.    char buf[4096];

  9.    if(pipe(fd) < 0)
  10.            printf("error\n");

  11.    if((childpid=fork())==0)
  12.    {
  13.         close(fd[0]);
  14.         dup2(fd[1],1);
  15.         execl("/bin/ls","ls",(char *) 0);
  16.         perror("exec is faild");
  17.    }
  18.    else
  19.    {

  20.         close(fd[1]);
  21.         read(fd[0],buf,4096);
  22.         printf("%s",buf);
  23.    }
  24.    return 0;
  25. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2005-07-04 16:22 |只看该作者

有关管道的问题

我做了一下管道,这个可以实现父进程通过缓冲区得到子进程得标准输出.可是离我得要求还有差距.我是有多个子进程,一个父进程

#include <stdio.h>;
#include <stdlib.h>;
#include <fcntl.h>;

int main(int argc,char *argv[])
{
        int fd[2];
        pid_t childpid;
        char buf[4096];

        if(pipe(fd)<0)
        {
                printf("111\n";
                exit(1);
        }
        if((childpid=fork())==0)
        {
                dup2(fd[1],STDOUT_FILENO);
                close(fd[0]);
                close(fd[1]);
                execl("/bin/ls","ls","-l",(char *) 0);
                perror("exec is faild";
        }
        else
        {
                read(fd[0],buf,4096);
                close(fd[1]);
                close(fd[0]);
                printf("444[%s]\n",buf);
        }
        return 0;
}

论坛徽章:
0
9 [报告]
发表于 2005-07-04 16:36 |只看该作者

有关管道的问题

我要用fifo来做,因为涉及到缓冲得问题, 先进先出。请老大们指教

论坛徽章:
0
10 [报告]
发表于 2005-07-05 09:55 |只看该作者

有关管道的问题

关注一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP