一.popen函数
1.简介
创建一个管道,然后再创建一个进程。然后执行命令
2.调用格式
#include <stdio.h>
FILE *popen(const char *command, const char *type);
3.popen说明
创建一个管道,然后fork创建一个进程。由于管道具有单向性质,所以参数type只能指定为读或写,不能同时指定。函数返回的值也相应的只读或只写。参数command是个指针类型,指向一段以字符串结束符结尾的带有shell命令的可执行命令字符串。command参数会通过-c参数传给/bin/sh,然后被shell执行。参数type和参数command类型一样,也是一个指针,指针type必须为非空,指向“r”或“w”来表示参数command只读或只写。在glibc2.9以来,参数type在“r”或“w”基础上再添加“e”,该标志可以设置文件描述符FD_CLOEXEC属性,类似open的O_CLOEXEC
4.函数返回值
popen函数的返回值是正常I/O流,她往往和pclose()成对出现,调用pclose来关闭。向这个流写操作类似于命令command标准输入。读取这个流类似于读取command的标准输出。注意popen()流的输出默认是全缓冲的,只有缓冲满的时候再flash输出。pclose()函数会等待popen创建的进程执行命令结束然后再返回command执行的状态。如果popen执行调用fork创建进程或者pipe创建管道(设置errno),或者没有更多内存给popen时(不会设置errno),返回NULL。如果进程结束状态失败,那么pclose返回-1。如果参数非法,errno设置为EINVAL。如果pclose不能获取子进程状态,错误设置为ECHILD。