zoukankan      html  css  js  c++  java
  • linux下C和shell调用的popen函数

    说明:
         本文介绍popen函数的使用方法和行为机理,并给出实际的例子来辅助说明了popen函数的使用方法。
    popen函数使用FIFO管道执行外部程序,首先让我们看看popen的函数原型吧:
    #include <stdio.h>
    FILE *popen(const char *command, const char *type);
    int pclose(FILE *stream);
           popen 通过type是r 还是w 来确定command的输入/输出方向,r和w是相对command的管道而言的。r表示command从管道中读入,w表示 command通过管道输出到它的stdout,popen返回FIFO管道的文件流指针。pclose则用于使用结束后关闭这个指针。
    下面一起来看一个例子:
    /*******************************************************************************************
    ** Name:popen.c
    **      This program is used to show the usage of popen() .
    *******************************************************************************************/
    #include <sys/types.h> 
    #include <unistd.h> 
    #include <stdlib.h> 
    #include <stdio.h> 
    #include <string.h>
    int main( void ) 
       FILE   *stream; 
       FILE   *wstream;
       char   buf[1024]; 
       
        memset( buf, '', sizeof(buf) );//初始化buf,以免后面写如乱码到文件中
        stream = popen( "ls -l", "r" ); //将“ls -l”命令的输出 通过管道读取(“r”参数)到FILE* stream
        wstream = fopen( "test_popen.txt", "w+"); //新建一个可写的文件
        fread( buf, sizeof(char), sizeof(buf), stream); //将刚刚FILE* stream的数据流读取到buf中
        fwrite( buf, 1, sizeof(buf), wstream );//将buf中的数据写到FILE    *wstream对应的流中,也是写到文件中
        
        pclose( stream ); 
        fclose( wstream );
        
        return 0;
    }  
    [root@localhost src]# gcc popen.c 
    [root@localhost src]# ./a.out   
    [root@localhost src]# cat test_popen.txt 
    总计 128
    -rwxr-xr-x 1 root root 5558 09-30 11:51 a.out
    -rwxr-xr-x 1 root root 542 09-30 00:00 child_fork.c
    -rwxr-xr-x 1 root root 480 09-30 00:13 execve.c
    -rwxr-xr-x 1 root root 1811 09-29 21:33 fork.c
    -rwxr-xr-x 1 root root 162 09-29 18:54 getpid.c
    -rwxr-xr-x 1 root root 1105 09-30 11:49 popen.c
    -rwxr-xr-x 1 root root 443 09-30 00:55 system.c
    -rwxr-xr-x 1 root root    0 09-30 11:51 test_popen.txt
    -rwxr-xr-x 1 root root 4094 09-30 11:39 test.txt
  • 相关阅读:
    Debian常用操作
    debian-11.0.0-amd64
    CentOS-8.4.2105-x86_64
    第20章: 二进制方式部署K8S1.20高可用集群
    天狮集团云函数实践:自定义业务逻辑实现跨境电商全球直播
    峰值利用率80%+,视频云离线转码自研上云TKE实践
    腾讯首个CNCF沙箱开源项目
    斗鱼直播云原生实践之注册中心篇
    Superedge的新特性和未来之路
    腾讯云与 Grafana Labs 达成深度合作, 推出全新 Grafana 托管服务
  • 原文地址:https://www.cnblogs.com/lidabo/p/4510064.html
Copyright © 2011-2022 走看看