zoukankan      html  css  js  c++  java
  • 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:

  • 相关阅读:
    安装VMware,出现Microsoft Runtime DLL 安装程序未能完成安装,解决方法
    linux mysql udf 提权
    XXE漏洞学习
    了解Metasploit中的Payloads(有效载荷)
    Metasploit 如何使用Exploits(漏洞)
    Metasploit 使用MSFconsole接口
    Metasploit 模块和位置
    Nmap速查手册
    Linux常用命令大全(非常全!!!)
    Web中常见的绕过和技巧
  • 原文地址:https://www.cnblogs.com/AlwaysOnLines/p/5585325.html
Copyright © 2011-2022 走看看