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

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h> int main(void)
{
char c; while ((c = getchar()) != EOF) {
if (isupper(c)) {
c = tolower(c);
} if (putchar(c) == EOF) {
perror("output error");
} if (c == '\n') {
fflush(stdout);
}
} return EXIT_SUCCESS;
}

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. dotnet core 命令行使用web deploy 部署项目到远程IIS

    众所周知dotnet cli可以用来编译和生成发布.net core,其实dotnet publish 还能进行WebDeploy.先解释一下使用场景一般是用于持续部署 dotnet publish进 ...

  2. Gym 101055A 计算几何,暴力

    http://codeforces.com/gym/101055/problem/A 题目:给定一些三维空间的点,要你找一个平面,能覆盖尽量多的点,只要求输出点数即可.n<=50 因为数据量小, ...

  3. Spring RestTemplate GET 请求参数

    @Test public void testUpdateProfitJson_GET_Params() throws BusinessException { String apiURL="U ...

  4. (转)Linux命令详解-file

    Linux命令详解-file 原文:https://www.cnblogs.com/Dodge/p/4278306.html file命令用来识别文件类型,也可用来辨别一些文件的编码格式.它是通过查看 ...

  5. PHPGGC学习----实践

    本文首发于先知:https://xz.aliyun.com/t/5450 PHPGGC学习----理论部分对PHPGGC工具的使用方法有了一个基本的了解,接下来需要利用实践环境进行一个实践操作,巩固一 ...

  6. python起源,变量,用户交互,流程语句

    1.Python的起源 Python是一门解释型弱类型编程语言. 特点:简单.明确.优雅 2.Python解释器 CPython官方提供的, 内部使用C语言来实现 PyPy,一次性把我们的代码解释成字 ...

  7. 工作中遇到的有关echarts地图和百度地图的问题

    工作中遇到的有关echarts地图和百度地图的问题 *** 前言:在做项目中需要制作一个场景是左边是柱状图,右边是地图,地图上悬浮一个按钮可以切换echarts地图和百度地图.*** 功能: 在点击左 ...

  8. Android各大手机系统打开权限管理页面

    最近项目上比较忙,终于有空闲时间写写东西了. 相信做过Android的都知道,现在的手机系统五花八门,当我们去请求用户的权限的时候,总是会弹出是否允许的对话框. 而且用户一旦不小心点了拒绝,下次就不再 ...

  9. 【extjs6学习笔记】1.16 初始: 关于主题

    打开app.json,里面有主题设置 主题说明 theme-base 这个包是所有其他主题的基础主题,是唯一没有父主题的主题. 它包含Ext JS组件和布局正常工作绝对必需的最低限度的一组CSS规则. ...

  10. 在IIS 7.5上安装WebDAV(http文件下载上传)

    WebDAV 简介 WebDAV (Web-based Distributed Authoring and Versioning) 一种基于 HTTP 1.1协议的通信协议.它扩展了HTTP 1.1, ...