老林的C语言新课, 想快速入门点此 <C 语言编程核心突破>
当我们想用C语言调用一个现有程序, 并且想获取程序返回值而不是在终端输出, 那么就必须调用popen( )
函数了.
popen( )
会创建一个管道, 并启动新进程, 通过管道进行进程间通信。popen( )
返回一个文件指针,类似fopen( )
, 只不过打开的不是文件, 文件指针用来读取或写入子进程的输入/输出。
popen( )
函数有两种模式:读模式r
和写模式w
。在读模式下,从子进程的输出中读取数据;在写模式下,将数据写入子进程的输入。
popen( )
在标准库
中的函数原型: man文档
#include
FILE *popen(const char *command, const char *type);
int pclose(FILE *stream);
文件指针需要被回收, 用pclose( )
函数.
以下代码在Linux和Windows下都可以用, ls -l
是一个Linux命令, 用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。
#include
int main()
{
FILE *fp;
char buffer[1024];
// 执行命令并读取输出
fp = popen("ls -l", "r");
if (fp == NULL)
{
printf("无法执行命令\n");
return 1;
}
// 读取输出并打印
while (fgets(buffer, sizeof(buffer), fp) != NULL)
{
printf("%s", buffer);
}
// 关闭文件指针
pclose(fp);
return 0;
}
我在2022-12-11 Windows下如何用C/C++获取cpu数量和物理核数文章中, 使用了 popen( )
函数调用 wmic cpu get
命令, 并将其输出传入程序, 判读电脑cpu属性.
虽然C语言课本不会介绍这个标准库函数, 但既然这么有用, 还是掌握一下.
老林的C语言新课, 想快速入门点此 <C 语言编程核心突破>