函数原型:
#include<stdio.h>
FILE* popen(const char* command, const char* type);
void pclose(FILE* stream);
功能:
popen函数是通过创建一个管道的方式打开一个进程,并调用shell。因为管道是被定义为单向的,所以type的值只能是r或w其中的一个,结果流也是如此。
command(命令行/命令的意思)参数:是一个以NULL结尾的字符串,这个字符串应是一个shell命令。这个命令会被送到 /bin/sh中,并以 -c执行即被shell执行。
type参数:只能是r或w中的一个,r或w是相当command管道而言的。r表示从command管道中读,w表示通过command管道输出到stdout中(输出流为全缓冲)。
返回值:如果fork或者pipe失败,或者不能分配到内存都会返回NULL,成功则返回标志I/O流。popen没有为申请内存失败设置errno值,但fork和pipe都有其相应的errno值。如果type参数不合法,errno会别设置为EINVAL.
注意:只能用pclose函数进行关闭操作,不能用fclose。
例子:
#include <stdio.h>
int main()
{
FILE *fp;
size_t n_read;
char str[128] = {"\0"};
fp = popen("ps","r");//ps为指令
n_read = fread(str,128,1,fp);
if(n_read != -1){
printf("%s\n",str);
}
pclose(fp);
return 0;
}