popen比system在应用中的好处:
可以获取运行的输出结果
NAME
popen, pclose - pipe stream to or from a process
SYNOPSIS
#include <stdio.h>
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
参数说明:
command:是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。
mode:只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是“r”则文件指针连接到commend的标准输出;如果type是“w”则文件指针连接到command的标准输入。
返回值:
如果调用成功,则返回一个读或者打开文件的指针;如果失败,返回NULL,具体错误要根据errno判断
int pclose(FILE* stream)
参数说明:
stream:popen返回的文件指针
返回值:
如果调用失败,返回-1
作用:
popen()函数用于创建一个管道:其内部实现为调用fork产生一个子进程,执行一个shell以运行命令来开启一个进程这个进程必须由pclose()函数关闭。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
char ret[1024]={0};
system("ps");
printf("ret=%s\n",ret);
return 0;
}
运行结果
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
char ret[1024] = {0};
FILE *fp;
fp = popen("ps","r");
int nread = fread(ret,1,1024,fp);
printf("read ret %dbyte,ret=%s\n",nread,ret);
return 0;
}
运行结果