函数原型
#include <stdio.h>
FILE * popen(const char *command , const char *type );
int pclose(FILE *stream);
popen 通过type是r还是w确定command的输入/输出方向,r和w是相对command的管道而言的。
r表示command从管道中读入,w表示 command通过管道输出到它的stdout
返回值: popen返回FIFO管道的文件流指针
关闭指针: pclose则用于使用结束后关闭这个指针
示例1
FILE *stream;
FILE *wstream;
char buf[1024] = {0};
stream = popen( "ls -l", "r" ); //将“ls -l”命令的输出 通过管道读取(“r”参数)到FILE* stream
wstream = fopen( "test_popen.txt", "w+"); //新建一个可写的文件
fread( buf, sizeof(char), sizeof(buf), stream); //将刚刚FILE* stream的数据流读取到buf中
fwrite( buf, 1, sizeof(buf), wstream );//将buf中的数据写到FILE *wstream对应的流中,也是写到文件中
pclose( stream );
fclose( wstream );
示例2
#include <cstdio>
std::string create_container()
{
std::string ret;
FILE *fd = popen("./create_room.sh","r");
if(fd != NULL)
{
char buff[1024] = {0};
fread(buff,2,sizeof(buff),fd);
unsigned short port = atoi(buff);
std::cout<<port<<std::endl;
ret.append(buff);
pclose(fd);
}
return ret;
}
int main()
{
create_container();
return 0;
}
Linux popen()执行shell命令