如何使用 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 捕获另一个进程的输出? 的相关文章

  • 在 C# 中使用“using”关键字避免多次处置的最佳实践

    当变量是 IDisposable 时 我们有using关键字来管理处置 但是如果我们在方法中返回值怎么办 using twice StringContent stringToStringContent string str using St
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • 是否可以从 C++ 应用程序调用 C# 应用程序?

    我是一名编程学生 现在我已经上了两门 C 课程 这个学期我将参加我的第一门 C 课程 出于好奇 是否可以从 C 应用程序调用 C 应用程序 如果是的话 是否还可以检查运行该程序的计算机是否具有 NET框架 我只是很好奇 我想如果可能的话 这
  • 无法将 std::min 传递给函数,std::min 的副本有效

    Passing std min函数无法编译 我复制了 libcpp 声明std min进入我的源文件并且它可以工作 std 版本有什么问题 clang 和 gcc 也会发生同样的情况 在 Godbolt 上测试 https godbolt
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • MFC CList 支持复制分配吗?

    我在 MSVC 中查找了 CList 定义afxtempl h http www cppdoc com example mfc classdoc MFC AFXTEMPL H html并记录在MSDN http msdn microsoft
  • 司机和提供商之间的区别

    数据库中的驱动程序和提供程序有什么区别 有没有解释一下 不胜感激 样本 ADO NET driver for MySQL vs providerName System Data EntityClient 来自 MSDN 论坛 驱动程序是安装
  • 将设置函数(setter)标记为 constexpr 的目的是什么? [复制]

    这个问题在这里已经有答案了 我无法理解将 setter 函数标记为的目的constexpr 自 C 14 起这是允许的 我的误解来自以下情况 我使用 constexpr c tor 声明一个类 并且我将通过创建该类的 constexpr 实
  • 将下拉列表与字典绑定

    我将字典绑定到下拉列表 举例来说 我的字典中有以下项目 Test1 123 Test2 321 我希望下拉文本采用以下格式 Test1 Count 123 Test2 Count 321 我沿着以下路径走 但没有运气 MyDropDown
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 如何使用 Roslyn 通过扩展方法、静态类中的方法以及带有 ref/out 参数的方法来访问调用

    我正在致力于创建一个开源项目 用于创建 NET UML 序列图 该项目利用名为 js sequence diagrams 的 javascript 库 我不确定 Roslyn 是适合这项工作的工具 但我想我应该尝试一下 所以我整理了一些概念
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • 将错误代码映射到 C++ 中的字符串

    将错误代码从枚举映射到字符串的更有效方法是什么 在 C 中 例如 现在我正在做这样的事情 std string ErrorCodeToString enum errorCode switch errorCode case ERROR ONE
  • 使用 xslt 将 xml 转换为 xsl-fo 时动态创建超链接?

    我想使用 xsl 文件在 PDF 报告中创建标题 如果源文件包含超链接 则应将其呈现为超链接 否则呈现为纯文本 例如 我的 xml 如下所示 a href http google com target blank This is the h
  • C 语言中的 Alpha 混合 2 RGBA 颜色[重复]

    这个问题在这里已经有答案了 可能的重复 如何快速进行阿尔法混合 https stackoverflow com questions 1102692 how to do alpha blend fast 对 2 个 RGBA 整数 颜色进行
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati
  • 如何在c linux中收听特定接口上的广播?

    我目前可以通过执行以下操作来收听我编写的简单广播服务器 仅广播 hello int fd socket PF INET SOCK DGRAM 0 struct sockaddr in addr memset addr 0 sizeof ad
  • 使用 C# 动态创建按钮并按预定义的顺序放置它们

    NET 4 5 C 创建 Windows 窗体 我想动态创建和添加按钮并为其分配单击事件 但希望它们以特定的方式动态放置 就像图像一样 我的问题是如何以上述方式动态放置按钮 即 4x4 格式 一行 4 个按钮 4 列 但行数不受限制 是否可
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g

随机推荐

  • 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