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:

Linux popen/pclose的更多相关文章

  1. linux popen()与system()的区别

    linux popen()与system()的区别 popen() 可以在调用程序和POSIX shell /usr/bin/sh 要执行的命令之间创建一个管道(请参阅sh-posix(1) ). p ...

  2. popen&pclose管道方式操作shell命令

    popen, pclose - pipe stream to or from a process FILE *popen( const char *command, const char *type) ...

  3. [apue] popen/pclose 疑点解惑

    问题请看这里: [apue] 使用 popen/pclose 的一点疑问 当时怀疑是pclose关闭了使用完成的管道,因此在pclose之前加一个足够长的sleep,再次观察进程文件列表: 哈哈,这下 ...

  4. [apue] 使用 popen/pclose 的一点疑问

    当我们需要将输出作为标准输入传递给一个命令,或者将一个命令的输出作为标准输入来读取, 一般会想到使用pipe与fork相结合的方式,来重定向标准输入/输出给指定命令. popen/pclose 帮助我 ...

  5. linux popen 获取 ip test ok

    任务:unix,linux通过c程序获取本机IP. 1. 标准I/O库函数相对于系统调用的函数多了个缓冲区(,buf),安全性上通过buf 防溢出. 2.printf 这类输出函数中“ ”若包含“记得 ...

  6. popen pclose 不等待命令执行完毕

    $handle = popen("start D:\\test.bat", "r"); //exec("start D:\\test.bat" ...

  7. linux popen函数

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

  8. popen()/pclose()阻塞性问题验证

    背景: popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程.这个管道必须由pclose()函数关闭,而不是fclose()函数. pclos ...

  9. popen && pclose函数

    1. 函数操作: 创建一个管道,调用fork产生一个子进程,关闭管道的不使用端,执行一个shell以运行命令,然后等待命令终止: 2. 函数原型: #include <stdio.h> F ...

随机推荐

  1. C++拾遗(三)关于复合类型

    数组相关 初始化只能在定义的时候使用,不能把数组赋给另一个数组. 初始化可以提供比元素数目少的初值,其它元素将被置为0. 字符char数组只有在以\0结尾时才是一个字符串.sizeof()返回数组的长 ...

  2. c#结构体和字节数组的转换、字节数组和stream的转换

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/streambytsstruct.html using System; using ...

  3. C++工厂方法模式

    class IFactoryBase { public: IFactoryBase(void); virtual ~IFactoryBase(void); public: virtual IProdu ...

  4. RB1001: IE6 IE7 IE8(Q) 负边距 (margin) 导致元素溢出 hasLayout 容器时显示异常

    标准参考 根据W3C CSS2.1规范第8.3节中的描述,边距属性设置了一个框的边距区的宽度.'margin' 缩写属性设置所有四边的边距,而其它的边距属性( 'margin-top' ,'margi ...

  5. Asp.net的IP地址屏蔽功能设计

    "IP地址的长度为32位,分为4段,每段8位,用十进制数字表示,每段数字范围为0~255,段与段之间用句点隔开." 由此我们了解到,IP地址实际上是一个32位正整数,在C#中可以使 ...

  6. 很久之前写的Ajax库

    很久之前写的一个小型AJAX的js,放在上面以免以后想玩了找不到了. // version : 0.1 beta // author : __Ajax function __Ajax(url,opti ...

  7. Win7 64位 php-5.5.13+Apache 2.4.9+mysql-5.6.19 配置

    一 :准备阶段 1:php php-5.5.13下载链接:http://windows.php.net/downloads/releases/php-5.5.13-Win32-VC11-x64.zip ...

  8. Win7-IIS7下运行PHP网站(以配置好的drupal网站为例)

    0.前提:IIS7已启用. drupal网站配置文件web.config中用到了“简洁链接”(URL重写),所以,还需要事先安装URL重写模块. URL重写模块(url rewrite)下载地址: r ...

  9. ubuntu 关闭开启防火墙

    关闭防火墙: 命令: sudo ufw disable 打开防火墙 命令: sudo ufw enable

  10. 多目标遗传算法 ------ NSGA-II (部分源码解析)README 算法的部分英文解释

    This is the Readme file for NSGA-II code. About the Algorithm--------------------------------------- ...