乐趣区

关于进程间通信:C语言popen-函数调用其他进程返回值

前言

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

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

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


一、popen() 函数原型

popen()在规范库 <stdio.h> 中的函数原型: man 文档

       #include <stdio.h>

       FILE *popen(const char *command, const char *type);
       int pclose(FILE *stream);

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

二、应用示例 (AI 提供)

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

#include <stdio.h>

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;
}

总结

我在一篇文章中, 应用了 popen() 函数调用 wmic cpu get 命令, 并将其输入传入程序, 判读电脑 cpu 属性.

尽管 C 语言课本不会介绍这个规范库函数, 但既然这么有用, 还是把握一下.

退出移动版