管道通信(使用使用popen和pclose函数可以简洁的控制管道)

函数原型:

FILE *popen(const char * command ,const char *mode)

int pclose(FILE * stream)

注意点:

使用popen和pclose函数可以简洁的控制管道,不需要更多的代码,

但是降低了程序员对管道的控制能力

参数commend是shell命令

参数mode是一个字符指针,r或W,分别表示popen函数的返回值是一个读打开文件指针,还是写打开文件指针,失败时返回值为NULL,

并设置出错变量errno

代码实例:

popen函数(1)创建管道
(2)调用fork函数创建子进程
(3)执行exec函数调用,调用/bin/sh -c 执行commend中的命令字符串,返回标准I/O 文件指针
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<fcntl.h>
 int main( void )
  {
    FILE *fp;
    char buffer[80];

    fp = popen("cat /etc/passwd","r");
    fgets(buffer,sizeof(buffer),fp);
    printf("%s",buffer);

    pclose(fp);

    return 0;
  }

#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<limits.h>

int main()
{
  FILE * fp;

  char buf[100];

  if( ( fp = popen( "cat  /root/1.cpp","r") ) == NULL )
   {
    perror("failed to open !");
    exit(1);
   }

  while( (fgets( buf,sizeof(buf),fp) ) != NULL  )
   printf("%s",buf);
 return 0;
时间: 2024-10-12 22:36:03

管道通信(使用使用popen和pclose函数可以简洁的控制管道)的相关文章

基于管道的popen和pclose函数

标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行. 这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程. popen函数还创建一个管道用于父子进程间通信.父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数.下在给出popen.pclose的定义: 01 #include <stdio.h> 02 /* 03 函数功能:popen()会调用fork()产生子进程,然后从子进程中调用/bin/sh

【IPC通信】基于管道的popen和pclose函数

http://my.oschina.net/renhc/blog/35116 恋恋美食  恋恋美食 发布时间: 2011/11/12 23:20 阅读: 15897 收藏: 13 点赞: 5 评论: 0 标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行. 这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程. popen函数还创建一个管道用于父子进程间通信.父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传

linux下代替system的基于管道的popen和pclose函数

linux下使用system需要谨慎,那么代替它的方法是什么呢? 标准I/O函数库提供了popen函数,它启动另外一个进程去执行一个shell命令行. 这里我们称调用popen的进程为父进程,由popen启动的进程称为子进程. popen函数还创建一个管道用于父子进程间通信.父进程要么从管道读信息,要么向管道写信息,至于是读还是写取决于父进程调用popen时传递的参数.下在给出popen.pclose的定义: 01 #include <stdio.h> 02 /* 03 函数功能:popen(

python Subprocess执行系统命令管道、读取结果【多进程,进程间管道通信】

# -*- coding:utf-8 -*- __author__ = 'magicpwn' import subprocess import sys reload(sys) sys.setdefaultencoding('utf-8') # 执行命令的两个函数,新建进程执行系统命令 s = subprocess.check_call('dir', shell=True) p = subprocess.call('dir', shell=True) print s, p # 执行命令并捕获系统命

linux 管道通信

进程通信 进程是系统分配资源的最小单位, 不同进程之间是相互隔离的, Linux常用于进程通信的几种方式有 匿名管道及有名管道 : 匿名管道用于具有亲缘关系的进程通信, 有名管道则可用于一般进程之间. 信号 : 软件层对中断机制的一种模拟. 消息队列 共享内存 : 不同进程享同一块内存区域, 不同进程可以实时查看对方对共享内存的更新. 需要借助同步机制, 如互斥锁, 信号量. 信号量 : 主要用于不同进程以及同一进程不同线程的同步和互斥. 套接字 : 广泛用于网络间进程通信. 无名管道 管道是是

Linux下的进程通信方式(IPC)——管道通信

Unix IPC: 管道.命名管道(FIFO)      管道 1.概念 管道是单向的(半双工).先进先出.无结构的字节流,它把一个进程的输出和另一个进程的输入连接在一起. 写进程在管道的尾端写入数据,读进程在管道的首端读出数据.数据读出后将从管道中移走,其它读进程都不能再读到这些数据. 管道提供了简单的流控制机制.进程试图读一个空管道时,在数据写入管道前,进程将一直阻塞.同样,管道已经满时,进程再试图写管道,在其它进程从管道中读走数据之前,写进程将一直阻塞. 2.管道的特点 (1)单向数据通信

管道通信之无名管道---pipe()

pipe()函数在子进程产生之前就应该存在. 父子进程之间只进行一次传递 1 /*============================================ 2 > Copyright (C) 2014 All rights reserved. 3 > FileName:onepipe.c 4 > author:donald 5 > details: 6 ==============================================*/ 7 #inclu

管道通信,王明学learn

管道通信 一.通讯目的 1.数据传输 一个进程需要将数据发送给另一个进程. 2.资源共享 多个进程之间共享同样的资源. 3.通知事件 一个进程需要向另一个/组进程发送消息,通知它们发生了某事件. 4.进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知道它的状态改变. 二.通讯发展 Linux进程间通信(IPC:interprocesscommunication)由以下几部分发展而来: 1.UNIX进程间通信 2.基于Sy

fork产生子进程利用pipe管道通信

http://siqun.blog.163.com/blog/static/213496001201341231121720/ 转载链接:http://hi.baidu.com/hj11yc/item/9a2ea30cca773077bfe97efc注:加了一点内容 进程间通信 fork pipe pie_t 等用法(管道机制 通信) 每个进程各自有不同的用户地址空间,任 何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲 区,进程1把数据从用户