• Linux popen/pclose


    popen() 函数

    #include <stdio.h>
    FILE * popen(const char *command , const char *type );
    int pclose(FILE *stream);

    用创建管道的方式启动一个进程,并调用shell.

    因为管道是被定义成单向的,所以type参数只能定义成只读或者只写,不能是两者同时,结果流也相应的是只读或者只写.

    command 参数是一个字符串指针, 指向的是一个以null结束符结尾的字符串, 这个字符串包含一个shell命令. 这个命令被送到/bin/sh以-c参数执行, 即由shell来执行. type参数也是一个指向以null结束符结尾的字符串的指针, 这个字符串必须是 "r" 或者 "w" 来指明是读还是写.

    popen()函数的返回值是一个普通的标准I/O流, 它只能用pclose()函数来关闭, 而不是fclose()函数,向这个流的写入被转化为对command 命令的标准输入; 而command命令的标准输出则是和调用popen()函数的进程相同,除非这个被command命令自己改变.

    相反的,读取一个"被popen了的"流,就相当于读取command命令的标准输出,而command的标准输入则是和调用popen,函数的进程相同.

    注意,popen 函数的输出流默认是被全缓冲的.

    pclose 函数

    等待相关的进程结束并返回一个 command命令的退出状态

    PS:

    FILE* stream;

    char Buffer[1024];

    //将"ls-l"的输出存放到Buffer.

    popen("ls-l","r");

    fread(Buffer,sizeof(char),sizeof(Buffer));

    //将内核log存放到Buffer.

    //popen("cat /proc/kmsg","r");

    fread(Buffer,sizeof(char),sizeof(Buffer));

    //For example:

  • 相关阅读:
    JAVA面试题
    Oracle入门笔记 ——启动进阶
    SQL 基础
    BZOJ 1507 Editor(块状链表)
    BZOJ 1018 堵塞的交通traffic(线段树)
    SPOJ 422 Transposing is Even More Fun(polay计数)
    BZOJ 2754 喵星球上的点名(后缀数组)
    POJ 1568 Find the Winning Move(极大极小搜索)
    Miller-Rabin素数测试学习小计
    Lucas定理学习小记
  • 原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5585325.html
Copyright © 2020-2023  润新知