设为首页 加入收藏

TOP

popen函数
2014-11-23 21:37:59 来源: 作者: 【 】 浏览:12
Tags:popen 函数

我们平时写程序和用终端输入命令的时候,常常会用到管道,比如,在一段程序中,你可能会这样写

int fd[2]; pipe(fd)

这时,我们就创建了一个管道,实现了进程之间的通信。

再比如,我们用终端的时候,我们可能会这样输入命令: ls -la | grep test

我们也是在两个命令之间创建了一个管道。

这篇文章介绍一个函数,用来创建管道的函数:popen

首先,我们先看看 man page 给的函数原型:

#include
FILE *popen(const char *command, const char *type);

int pclose(FILE *stream);

下面看看一段测试程序:

/*
 * popen_main.c
 *
 *  Created on: 2013年11月28日
 *      Author: DLUTBruceZhang
 */


#include 
  
   
#include 
   
     #include 
    
      #define MAX_BUF_LEN 4096 int main(int argc, char **argv, char **environ) { char *buf = NULL; buf = (char*)malloc(sizeof(char) * MAX_BUF_LEN); FILE *file = popen("ls -la", "r"); /*子进程执行 ls -la ,并把输出写入管道中*/ memset(buf, 0, sizeof(buf)); while (!feof(file)) { fgets(buf, MAX_BUF_LEN, file); /*另一个进程读取管道中的内容*/ printf("%s", buf); } pclose(file); free(buf); return 0; } 
    
   
  

首先,我用 popen 创建了一个管道,并执行了一个命令 “ls -la”, popen函数会调用 fork 和 pipe,所以,这个命令是一个子进程执行的,由于管道之间的共享可以发生在父子进程之间,所以,命令的输出可以由父进程读取,之后显示出来,下面的就是这段程序的输出:

总用量 32
drwxrwxr-x  3 administrator administrator  4096 2013-11-28 09:58 .
drwxrwxr-x 13 administrator administrator  4096 2013-11-28 09:58 ..
-rw-rw-r--  1 administrator administrator 10812 2013-11-28 09:58 .cproject
drwxrwxr-x  2 administrator administrator  4096 2013-11-28 10:05 Debug
-rw-rw-r--  1 administrator administrator   487 2013-11-28 10:05 popen_main.c
-rw-rw-r--  1 administrator administrator   762 2013-11-28 09:58 .project
-rw-rw-r--  1 administrator administrator   762 2013-11-28 09:58 .project


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇 acm 1012 下一篇C语言变长数组 struct中char data..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: