[C.C++] 2023-09-11 C语言popen( )函数调用其他进程返回值 ( C知道辅助编写 )

97 0
Honkers 昨天 15:09 来自手机 | 显示全部楼层 |阅读模式

老林的C语言新课, 想快速入门点此



前言

当我们想用C语言调用一个现有程序, 并且想获取程序返回值而不是在终端输出, 那么就必须调用popen( )函数了.

popen( ) 会创建一个管道, 并启动新进程, 通过管道进行进程间通信。popen( ) 返回一个文件指针,类似fopen( ), 只不过打开的不是文件, 文件指针用来读取或写入子进程的输入/输出。

popen( ) 函数有两种模式:读模式r和写模式w。在读模式下,从子进程的输出中读取数据;在写模式下,将数据写入子进程的输入。


一、popen( ) 函数原型

popen( )在标准库中的函数原型: man文档

  1. #include <stdio.h>
  2. FILE *popen(const char *command, const char *type);
  3. int pclose(FILE *stream);
复制代码

文件指针需要被回收, 用pclose( ) 函数.

二、使用示例 (C 知道提供)

以下代码在Linux和Windows下都可以用, ls -l 是一个Linux命令, 用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE *fp;
  5. char buffer[1024];
  6. // 执行命令并读取输出
  7. fp = popen("ls -l", "r");
  8. if (fp == NULL)
  9. {
  10. printf("无法执行命令\n");
  11. return 1;
  12. }
  13. // 读取输出并打印
  14. while (fgets(buffer, sizeof(buffer), fp) != NULL)
  15. {
  16. printf("%s", buffer);
  17. }
  18. // 关闭文件指针
  19. pclose(fp);
  20. return 0;
  21. }
复制代码

总结

我在2022-12-11 Windows下如何用C/C++获取cpu数量和物理核数文章中, 使用了 popen( ) 函数调用 wmic cpu get 命令, 并将其输出传入程序, 判读电脑cpu属性.

虽然C语言课本不会介绍这个标准库函数, 但既然这么有用, 还是掌握一下.


老林的C语言新课, 想快速入门点此


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行