标准I/O库提供了两个函数popen和pclose。
popen将会调用pipe创建一个管道,fork一个子进程,使用exec执行一个shell命令。(popen需要配合pclose使用)
#include <stdio.h>
FILE * popen(const char *cmdstring,const char *type);
cmdstring指向需要执行的命令。
type如果是"r",则popen返回的文件指针指向标准输出。
type如果是"w",则popen返回的文件指针指向标准输入。
返回值:出错返回NULL,成功则返回文件指针。
pclose(关闭管道I/O),等待命令终止,然后返回shell的终止状态,如果shell不能被执行,则pclose返回的终止状态与shell已执行exit(127)一样。
#include<stdio.h>
int pclose(FILE * stream);
#include<stdio.h>
int pclose(FILE * stream);
函数说明
pclose()用来关闭由popen所建立的管道及文件指针。参数stream为先前由popen()所返回的文件指针。
返回值
如果成功,返回cmdstring的终止状态,否则返回-1。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void func()
{
FILE * fp = NULL;
char chBuffer[1024]={0};
char chCmd[100] = "cat /proc/filesystems";
fp = popen(chCmd,"r");
if (fp)
{
memset(chBuffer,0,sizeof(chBuffer));
while( NULL != fgets(chBuffer,sizeof(chBuffer),fp))
{
printf("%s",chBuffer);
}
pclose(fp);
}
}
int main()
{
func();
return 0;
}