• C 语言popen函数,实现shell和读取内容


    1. popen()函数

    头文件:#include <stdio.h>

    函数原型:FILE * popen(const char * command, const char * type);

    关闭文件流:int pclose(FILE * stream);

      函数popen 先执行fork,然后调用exec以执行cmd,并且返回一个标准I/O文件指针。

      cmd是一个包含shell命令的字符串指针(以NULL结束字符结尾);
      如果type是"r",则文件指针连接到cmd的标准输出;
      如果type是"w",则文件指针连接到cmd的标准输入。

    2. 描述

      popen() 函数用创建管道的方式启动一个进程, 并调用 shell. 因为管道是被定义成单向的, 所以type参数只能定义成只读或者只写, 不能是两者同时, 结果流也相应的是只读或者只写.

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

       popen() 函数的返回值是一个普通的标准I/O流, 它只能用 pclose() 函数来关闭, 而不是 fclose() 函数.

      注意, popen 函数的输出流默认是被全缓冲的;pclose 函数等待相关的进程结束并返回一个 command 命令的退出状态, 就像 wait4 函数 一样

    3. 示例

     1 #include <stdio.h>
     2 
     3 int main(void)
     4 {
     5     FILE * fp;
     6     if ((fp = popen("ls -l", "r)) == NULL)
     7     {
     8         perror("open failed!");
     9         return -1;
    10     }
    11     char but[256];
    12     while (fgets(but, 255, fp) != NULL)
    13         printf("%s", buf);
    14     if (pclose(fp) == -1)
    15     {
    16         perror("close failed!");
    17         return -2;
    18     }
    19     return 0;
    20 }
  • 相关阅读:
    非线性方程(组):高维方程解法
    非线性方程(组):一维非线性方程(二)插值迭代方法 [MATLAB]
    非线性方程(组):一维非线性方程(一)二分法、不动点迭代、牛顿法 [MATLAB]
    非线性方程(组):计算基本理论
    常微分方程初值问题:多步预测-修正方法 [MATLAB]
    你会使用super()吗?你确定你了解它吗?
    Django简介
    Web框架的原理
    Django ORM 中的批量操作
    Python的切片
  • 原文地址:https://www.cnblogs.com/xiaofeiIDO/p/7294652.html
Copyright © 2020-2023  润新知