1. popen函数是标准c提供的一个管道创建函数,其内部操作主
  2. 要是创建一个管道,调用fork创建子进程,关闭不需用的文件描述符,调用exec函数族执行popen的第一个参数。然后等到关闭。
  3. 也就是说我们可以传递一个命令(ls -l......)或一个可执行程序。于pipe对比来说代码相对少很多。
  4. **************************************************
  5. 相关函数:
  6. #include <stdio.h>
  7. FILE *popen(const char *command, const char *type);
  8. 1.command:shell命令或可执行程序名
  9. 2.type打开方式,可类比fopen函数
  10. 返回值:成功返回文件指针,失败返回NULL
  11. int pclose(FILE *stream);
  12. 返回值:成功返回command终止状态,失败返回-1
  13. **************************************************
  1. 实例:
  2. 实现从终端得到字符并将大写转换为小写输出。
  3. 分析:
  4. 编写一个程序实现从终端得到字符并处理过滤后写入标准输出,
  5. 然后编译成可执行文件。在另一个程序调用popen去执行这个可执行程序。并从文件流中读取数据
  6. 代码:
  7. 1.filename: popen_filter.c
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <unistd.h>
  11. #define MAXLINE 1024
  12. int main(void)
  13. {
  14. FILE *fpin = NULL;
  15. char line[MAXLINE];
  16. if ((fpin = popen("./filter", "r")) == NULL) {
  17. perror("popen error");
  18. return EXIT_FAILURE;
  19. }
  20. for (; ;) {
  21. fputs("prompt> ", stdout);
  22. fflush(stdout);
  23. if (fgets(line, MAXLINE, fpin) != NULL) {
  24. if (fputs(line, stdout) == EOF) {
  25. perror("fputs error");
  26. return EXIT_FAILURE;
  27. }
  28. } else {
  29. break;
  30. }
  31. }
  32. if (pclose(fpin) == -1) {
  33. perror("pclose error");
  34. return EXIT_FAILURE;
  35. }
  36. putchar('\n');
  37. return EXIT_SUCCESS;
  38. }
  1. 2.filename: filter.c
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. int main(void)
  6. {
  7. char c;
  8. while ((c = getchar()) != EOF) {
  9. if (isupper(c)) {
  10. c = tolower(c);
  11. }
  12. if (putchar(c) == EOF) {
  13. perror("output error");
  14. }
  15. if (c == '\n') {
  16. fflush(stdout);
  17. }
  18. }
  19. return EXIT_SUCCESS;
  20. }

popen和pclose详解及实例的更多相关文章

  1. XML参考 :XmlReader 详解、实例

    XML参考 :XmlReader 详解.实例-- 详解 转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1252191.html XML参考 ...

  2. Protocol Buffer技术详解(Java实例)

    Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...

  3. Protocol Buffer技术详解(C++实例)

    Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...

  4. Java学习-007-Log4J 日志记录配置文件详解及实例源代码

    此文主要讲述在初学 Java 时,常用的 Log4J 日志记录配置文件详解及实例源代码整理.希望能对初学 Java 编程的亲们有所帮助.若有不足之处,敬请大神指正,不胜感激!源代码测试通过日期为:20 ...

  5. groupadd命令详解(实例)

     groupadd命令详解(实例)  1.作用groupadd命令用于将新组加入系统. 2.格式groupadd [-g gid] [-o]] [-r] [-f] groupname 3.主要参数-g ...

  6. GLSL-几何着色器详解跟实例(GS:Geometry Shader)[转]

    [OpenGL4.0]GLSL-几何着色器详解和实例(GS:Geometry Shader) 一.什么是几何着色器(GS:Geometry Shader) Input Assembler(IA)从顶点 ...

  7. CvMat、Mat、IplImage之间的转换详解及实例

    见原博客:http://blog.sina.com.cn/s/blog_74a459380101obhm.html OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数 ...

  8. C语言操作WINDOWS系统存储区数字证书相关函数详解及实例

     C语言操作WINDOWS系统存储区数字证书相关函数详解及实例 以下代码使用C++实现遍历存储区证书及使用UI选择一个证书 --使用CertOpenSystemStore打开证书存储区. --在循环中 ...

  9. httpd配置文件详解及实例

    httpd配置文件详解及实例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.http协议的组成 http协议是C/S架构:我们可以把浏览器(如:IE,Firefox,Safar ...

随机推荐

  1. maven项目跳转页面报空指针错误 Servlet.service() for servlet 异常

    Servlet.service() for servlet jsp threw exceptionjava.lang.NullPointerExceptionat org.jaronsource.ms ...

  2. 剑指offer刷题记录

    目录 二维数组中的查找 替换空格 从尾到头打印链表 反转链表 重建二叉树 用两个栈实现队列 旋转数组的最小数字 斐波拉切数列 跳台阶 变态跳台阶 矩形覆盖 二进制中1的个数 数值的整次方 链表中倒数第 ...

  3. BZOJ 4919: [Lydsy1706月赛]大根堆 启发式合并

    我不会告诉你这是线段树合并的好题的... 好吧我们可以搞一个multiset在dfs时求出LIS(自带二分+排序)进行启发式合并,轻松加愉悦... #include<cstdio> #in ...

  4. Angular2.0的学习(五)

    第五节课: 1.组件的输入输出属性 2.使用中间人模式传递数据 3.组件生命周期以及Angular的变化发现机制

  5. 插入po得到主键,插入sql得到主键

    import com.yd.common.data.CIPPageInfo; import com.yd.common.data.CIPReqCondition; import com.yd.comm ...

  6. Java中常用的数据源

    几种常用的Java数据源解决方案 Java中的数据源就是javax.sql.DataSource.DataSource的创建可以有不同的实现. JNDI方式创建DataSource 以JNDI方式创建 ...

  7. QQ的全国地址编码

    D:\Program Files (x86)\Tencent\QQ\I18N\2052\LocList.xml

  8. Linux中ext2文件系统的结构

    1.ext2产生的历史 最早的Linux内核是从MINIX系统过渡发展而来的.Linux最早的文件系统就是MINIX文件系统.MINIX文件系统几乎到处都是bug,采用的是16bit偏移量,最大容量为 ...

  9. python接口自动化(四十一)- 发xml格式参数的post请求(超详解)

    简介 最近在工作中,遇到一种奇葩的接口,它的参数数据是通过xml,进行传递的,不要大惊小怪的,林子大了什么鸟都有,每个人的思路想法不一样,开发的接口也是各式各样的,如果想要统一的话,必须是提前团队已经 ...

  10. Likely root cause: java.lang.IllegalStateException: jar hell!

    jar hell 解决方案: 问题: Likely root cause: java.lang.IllegalStateException: jar hell! 解决: 当一一个类或者一一个资源文件存 ...