免费注册 查看新帖 |

Chinaunix

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

如何让程序接收stdout管道的内容? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-15 13:33 |只看该作者 |倒序浏览
例如 ls -al | program. 在程序内部对管道进行处理.
各位大哥,给个例子睢睢

论坛徽章:
0
2 [报告]
发表于 2005-07-15 14:37 |只看该作者

如何让程序接收stdout管道的内容?

自己改一下,看看是父进程关闭stdin还是什么的.
下面的程序是打开一个输入文件读入后,通过管道写入sort程序的标准输入流,进行排序.
相当于shell代码 cat <filename>; | sort,也就是匿名管道的应用方法.
自己试着改一下吧.

  1. //将父进程读入的文件通过管道写入到子进程的标准输入。
  2. // 创建了一个管道,并在子进程中调用execl执行了系统的排序程序sort
  3. //

  4. #include <stdio.h>;
  5. #include <unistd.h>;

  6. int main(int argc, char* argv[])
  7. {
  8.    FILE* names;   //输入文件
  9.    FILE* sort;      //连接到sort的输出文件
  10.    int fd[2];      //管道的文件描述符
  11.    int ch;

  12.    if (argc != 2)
  13.    {
  14.       printf("使用方法: pipesort <输入文件名>;\n");
  15.       exit(1);
  16.    }

  17.    names = fopen(argv[1], "r");
  18.    if (NULL == names)
  19.    {
  20.       perror("fopen");
  21.       exit(1);
  22.    }

  23.    if (fork() == 0)
  24.    {
  25.       //子进程代码
  26.       close(0);      //关闭标准输入文件描述符
  27.       dup(fd[0]);      //复制管道的输入端到标准输入
  28.       close(fd[0]);   //关闭多余的管道描述符
  29.       close(fd[1]);   //此处不使用管道的写入端口
  30.       execlp("sort", "sort", NULL);
  31.       perror("execlp");
  32.       exit(0);
  33.    }

  34.    //父进程的代码.
  35.    close(fd[0]);   //不使用管道的读入端口.
  36.    if (sort = fdopen(fd[1], "w") == NULL)
  37.    {
  38.       //无法打开管道写入端
  39.       perror("fdopen");
  40.       exit(1);
  41.    }

  42.    //复制数据到sort程序
  43.    while ((ch = getc(names)) != EOF)
  44.    {
  45.       putc(ch, sort);
  46.    }

  47.    fclose(names);
  48.    fclose(sort);
  49.    return (0);
  50. }
复制代码

论坛徽章:
0
3 [报告]
发表于 2005-07-15 14:58 |只看该作者

如何让程序接收stdout管道的内容?

哥们,你的代码好像不是我想要的.

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

如何让程序接收stdout管道的内容?

从stdin读就是了

论坛徽章:
0
5 [报告]
发表于 2005-07-15 16:45 |只看该作者

如何让程序接收stdout管道的内容?

[quote]原帖由 "FH"]从stdin读就是了[/quote 发表:


试过,也不行.

论坛徽章:
0
6 [报告]
发表于 2005-07-15 16:54 |只看该作者

如何让程序接收stdout管道的内容?

原帖由 "jetrix" 发表:


试过,也不行.


帖源码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP