Linux学习笔记-标准库中的管道操作

目录

 

理论

例子


理论

stdio.h里面有标志库管道操作

FILE *popen(const char* cmdstring, const char *type);返回值:成功返回文件指针,出错返回NULL;

 int pclose(FILE *fp);

返回值:cmdstring的终止状态,出错返回-1

 

注意:使用pepen()创建管道必须使用pclose()关闭!

 

popen内部原理:

Linux学习笔记-标准库中的管道操作

 

 

例子

源码如下:

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

int main(void){

        FILE *fp;

        //命令执行的结果放置在fp指向的结构体缓存中
        fp = popen("cat /etc/passwd", "r");
        char buf[512];
        memset(buf, 0, sizeof(buf));
        while(fgets(buf, sizeof(buf), fp) != NULL){

                printf("%s", buf);
        }

        pclose(fp);

        printf("-------------------------------------\n");
        //wc命令统计数据
        fp = popen("wc -l", "w");
        //向fp指向的结构体缓存中写入数据
        fprintf(fp, "1\n2\n3\n");
        pclose(fp);

        exit(0);
}

运行截图如下:

Linux学习笔记-标准库中的管道操作

-l为统计多少行