如何使用 C 捕获另一个进程的输出?

2024-01-13

如何使用纯 C 捕获另一个进程的输出?你能提供示例代码吗?

编辑:让我们假设Linux。我会对“相当可移植”的代码感兴趣。我想做的就是执行一个命令,捕获它的输出并以某种方式处理它。


有多种选择,但它在一定程度上取决于您的平台。那就是说popen应该适用于大多数地方,例如

#include <stdio.h>

FILE *stream;
stream = popen("acommand", "r");

/* use fread, fgets, etc. on stream */

pclose(stream);

请注意,这有一个非常具体的用途,它通过运行命令来创建进程acommand并以某种方式附加其标准输出,以便您的程序可以通过流访问它FILE*.

如果您需要连接到现有流程,或者需要进行更丰富的操作,您可能需要研究其他设施。 Unix 有多种机制来连接进程 stdout 等。

在windows下你可以使用CreateProcess用于创建新进程并将其标准输出句柄连接到您想要的 API。 Windows 也支持popen.

据我所知,没有简单的 C 方法可以做到这一点,因此它总是在某种程度上依赖于特定于平台的 API。

根据您的编辑popen看起来很理想,它“非常便携”,我认为没有它就没有类似 Unix 的操作系统,事实上它是单一 Unix 规范的一部分,并且POSIX http://www.opengroup.org/onlinepubs/009695399/functions/popen.html,它可以让您完全按照自己的意愿行事:执行流程、获取其输出并进行处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 C 捕获另一个进程的输出? 的相关文章

  • 运行 t4 脚本作为 resx 文件的自定义工具

    我有一个资源文件MyResource resx 我想改变MyResource Designer cs文件生成 我有一个 t4 脚本 它接受 resx 文件作为输入并给出结果转换 但是 我必须手动运行此 t4 才能使其工作 我看到 resx
  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • 对静态成员变量的未定义引用

    我有一个有静态成员的类 它也是我的程序中其他几个类的基类 这是它的头文件 ifndef YARL OBJECT HPP define YARL OBJECT HPP namespace yarlObject class YarlObject
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • 如何使用 ILoggerFactory 记录 Polly 的重试

    或者 如何从静态方法记录 From https github com App vNext Polly https github com App vNext Polly你有这样的例子 其中记录器神奇地可用 Policy Timeout 30
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • C++:将模板参数的模板类型成员添加为好友的正确语法?

    我有一个带有模板类型参数 tTRAIT 的类 我想加一个模板为好友type member aliastTRAIT 但我无法弄清楚语法 这可能吗 template
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 本地主机上的 .net HTTP_X_FORWARDED_FOR NULL

    抱歉 如果其他地方已经回答了这个问题 我找不到它 如果没有 我会尝试查找访问过该站点的机器的原始 IP 根据我的基本理解 变量HTTP X FORWARDED FOR无论代理和其他过滤器如何 都会显示用户的 IP 如果这是真的 我正在尝试对
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • C++ 错误:从“char”到“const char*”的转换无效

    我对 C 完全陌生 我创建了这个函数 bool guessWord string compWord cout lt lt Guess a letter string userLetter cin gt gt userLetter for u
  • 只读有运行时开销吗?

    出于某种原因 我一直认为readonly字段有与其相关的开销 我认为这是 CLR 跟踪是否存在readonly字段是否已初始化 这里的开销是一些额外的内存使用量 用于跟踪状态以及分配值时的检查 也许我这么认为是因为我不知道readonly字
  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • C# Julian 日期解析器

    我在电子表格中有一个单元格 它是 Excel 中的日期对象 但当它来自 C1 的 xls 类时 它会变成双精度型 类似于 2009 年 1 月 7 日的 39820 0 我读到这是儒略日期格式 有人可以告诉我如何在 C 中将其解析回 Dat
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u
  • 类模板的 C++ 静态成员 - 链接器警告“多重定义”[重复]

    这个问题在这里已经有答案了 假设出于某种原因 我想要一个类模板 MyTemp 和一些静态数据成员 smDummyVar Mytemp h ifndef MY TEMP H define MY TEMP H template

随机推荐

  • Vim 状态行不会从表达式扩展颜色/突出显示组

    我写了一个返回字符串的函数 function StatusBricks let l stat Brick statusbricks ReportLinecount raw brick color LineNr delimiter posit
  • Exe 安装抛出错误模块应包含程序集清单 .Net Core

    我已经实施了windows service using Net Core worker service 从命令提示符安装服务时出现错误 C Windows Microsoft NET Framework64 v4 0 30319 gt In
  • 尝试使用 LibGDX 登录 GooglePlay 游戏服务时出现“signInSilently():失败”

    我一直在尝试添加Google Game Services过去三天我一直在关注我的 LibGDX 项目 现在我首先尝试了 LibGDX 教程 但所有这些教程似乎都已经过时了 然后建议我使用Google Game Services官方代码 Li
  • 使用 nasm 在 64 位和 32 位架构上从汇编语言调用 printf

    我想在linux中从汇编语言调用printf函数 我想知道64位和32位汇编语言程序的方法 1 如果我想用字符串在 printf 中传递 32 位参数和 64 位参数 请告诉我两种情况 我该怎么做 2 对于 x86 32 位架构 如果我想做
  • pgAdmin 中的主键和外键

    我想知道有人能给我解释一下如何在 pgAdmin 中分配主键和外键吗 我在网上找不到任何信息 例如 我有一个学生表 其中包含他们的所有详细信息 地址 出生日期等 我将向表中添加一个 Student number 并使其成为主键 我只是想知道
  • 反射问题——类型安全警告

    Class getConstructors http java sun com javase 6 docs api java lang Class html get
  • 通过属性值对 XML 进行排序 PHP

    所以我有一个 XML 文件 我试图根据属性 order 按顺序循环遍历该文件 这是一个例子
  • JUnit 3 是否有类似于 @Ignore 的东西

    我被迫使用 JUnit 3 如果我使用 JUnit 4 我偶尔会使用 Ignore因为我的一些测试需要一些时间 JUnit 4 中有类似的东西吗 注释掉测试很草率 并且更改了名称 来自testXxx 可能会导致忘记测试 Ignore很棒 因
  • 富文本框如何突出显示文本块

    我需要在 RTB 中突出显示文本的特定部分 不是指更改字体样式 颜色 而是指使用特定颜色进行块选择 这类似于 Visual Studio 在调试模式下突出显示一行的方式 我如何使用 RTB 来实现此功能 或者更确切地说 这是否可能 如果不可
  • 为不同节点类型配置jstree右键上下文菜单

    我在网上看到了一个示例 展示了如何自定义 jstree 右键单击 上下文菜单的外观 使用 contextmenu 插件 例如 允许我的用户删除 文档 但不能删除 文件夹 通过从文件夹的上下文菜单中隐藏 删除 选项 现在我找不到那个例子了 有
  • R 中的 pheatmap 格式:图例大小并创建方形图

    Pheatmap 仅在 legend FALSE 时创建方形图 我尝试使用 par 来允许更多 oma 和 mar 空间 但运气不佳 图例也很大 我找不到任何有关减少此图例或更改其位置的文档 第一个图没有安装树状图 但这与尺寸问题无关 无论
  • 使用股票代码输入、yahoo 或 google API 检索公司名称

    只是寻找一个简单的 api 返回 我可以在其中输入股票代码并接收完整的公司名称 股票代码 MSFT 将返回 微软 import yfinance as yf msft yf Ticker MSFT company name msft inf
  • 如何将 NSPanel 显示为工作表

    我正在尝试将 NSPanel 显示为工作表 我天真地沿着这些路线做一些事情 SheetController sheetController SheetController alloc initWithWindowNibName Sheet
  • maven buildnumber插件错误The scm url can not be null

    我是 Maven 的新用户 并且很难让 buildnumber maven plugin 执行我所期望的操作 本质上 我希望 maven 构建我的项目并创建结果的 JAR 文件 并在 manifest mf 文件中设置构建号 我将在下面包含
  • 如何抑制此 COM 泛型警告?

    我正在使用 msbuild 编译 VB Net 2 0 应用程序 在 VS2008 中创建 现在我添加了一个通用返回类型 它给了我以下内容 警告 类型库导出器 遇到泛型类型实例 一个签名 通用代码可能不是 导出到COM 刚刚花了很长时间删除
  • 使用 GUI 和工作线程增强 Asio 模式

    我想使用 GUI 线程和某些套接字 IO 的工作线程来实现 Boost Asio 模式 工作线程将使用boost asio io service管理套接字客户端 套接字上的所有操作将仅由工作线程执行 GUI 线程需要从工作线程发送和接收消息
  • 融合几个接近点的简单方法?

    我有一个这样的点列表 points 57 213878612138828 17 916958304169601 76 392039480378514 0 060882542482108504 0 12417670682730897 1 04
  • Hibernate @LazyCollection 注解有什么用

    我有 2 个实体作为父实体和子实体作为 OneToMany 关系 Entity public class Parent Id GeneratedValue strategy GenerationType AUTO private Integ
  • java 如何知道您是否正在运行 javaw.exe 与 java.exe

    相关以编程方式从 java 代码中查找 java exe 的绝对路径 https stackoverflow com questions 9006127 find absolute java exe path programatically
  • 如何使用 C 捕获另一个进程的输出?

    如何使用纯 C 捕获另一个进程的输出 你能提供示例代码吗 编辑 让我们假设Linux 我会对 相当可移植 的代码感兴趣 我想做的就是执行一个命令 捕获它的输出并以某种方式处理它 有多种选择 但它在一定程度上取决于您的平台 那就是说popen