C++ Linux 与另一个程序交互 stdin / stdout

2024-01-19

我在 Linux 中有一个可以与 stdin/stdout 交互的可执行文件。我正在尝试用 C++ 编写一个程序,它可以交互地调用该程序,向其标准输入发送命令,并捕获其标准输出。

我真的很困惑。我不想分叉我的程序(是吗?)。我确实希望我的程序能够启动“客户端”,发送数据,获取输出,发送更多数据,获取更多输出,...,然后关闭“客户端”。

附:是的,我确信以前有人问过这个问题,但我花了几个小时真正摸不着头脑——可能没有使用正确的关键字。


执行另一个程序的唯一方法是通过其中一个exec()系统调用。这是唯一的办法。而且,如你所知,exec()用指定的程序替换正在执行的程序exec()。发出的流程exec()将不再存在,它是PID现在被新程序使用。

因此,从逻辑上讲,除非您希望您的程序被其他可执行文件替换,否则您的程序必须fork(),子进程使用exec()执行新的可执行文件。这是启动新进程并继续运行原始进程的传统方式。 Afork()为此需要。

您描述的情况是相当典型的、按数字绘制的情况,这种情况已经发生过无数次了:

  1. 使用 pipeline() 创建两个管道,一个用于管道标准输入,一个用于管道标准输出。

  2. 使用 fork()。子进程dup2()将 stdin 管道的读取端设置为 0,将 stdout 管道的写入端设置为 1,关闭每个原始管道的两端,并且exec()是新流程。

  3. 父进程关闭stdin管道的读取端、stdout管道的写入端,然后使用stdin管道的写入端和stdout管道的读取端继续与子进程交互。

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

C++ Linux 与另一个程序交互 stdin / stdout 的相关文章

随机推荐

  • 解析显式数组

    我正在尝试解析来自服务器的此类响应 1 a b 2 000000 1 2 3 1 2 3 x y z 1 2 3 1 2 3 除了为这种类型的消息编写我自己的 hack ish 解析器之外 还有一种我不知道的标准方法来解释它吗 您的输入是J
  • JQuery UI,单页上多个日期选择器

    我正在为房地产创建一个 PHP 网站 我是 jQuery 和 jQuery UI 的新手 但似乎无法在其他地方找到答案 请看这个屏幕截图 全尺寸 https i stack imgur com b3yQX png 对于每个 已收到 和 到期
  • Angular UI Router:abstract:true不会显示页面

    我正在尝试使用嵌套导航来围绕 Angular UI Router 进行思考 我的应用程序有多个页面 我已经设置了 StateProvider 并且页面之间的基本路由可以正常工作 但是 我现在尝试在这些页面之一中实现选项卡式视图 我就是无法让
  • Jquery序列化和serializeArray不适用于谷歌浏览器

    我有以下 html fieldset fieldset
  • 如何在 VBA (Excel) 中获取以毫秒为单位的 DateDiff-Value?

    我需要计算两个时间戳之间的差异 以毫秒为单位 不幸的是 VBA 的 DateDiff 函数不提供这种精度 有什么解决方法吗 您可以使用描述的方法here http www tek tips com faqs cfm fid 2292如下 创
  • 如何在集群中为一个节点和所有节点运行计划方法?

    我有一个在集群中运行的 Glassfish 3 1 2 和一个 EJB 3 1 应用程序 我的应用程序中需要两种预定方 法 一种每天只运行一次 在单个节点上 以及其他在所有节点上运行的类型 每 1 2 分钟 它们不需要运行同步方式 要求只是
  • 如何递归地将项目添加到列表中?

    目前 我正在解决一个问题 我得到一个列表 其元素可能包含其他列表 列表的列表或整数 例如 我可能会收到 1 2 3 4 5 6 7 9 我的目标是解析数组并附加仅整数到一个新列表 这是我到目前为止所做的 def fun a if a ret
  • Django Admin:列表中的分组数据

    我可以在 Django Admin 中显示分组结果吗 默认情况下 它们显示所有行 我想根据某些字段对这些行进行分组并显示它 像 GROUP BY username 之类的东西 我尝试过搜索但没有成功 使用怎么样list filter my
  • IMFMediSource 不支持 IKsPropertySet 接口

    我正在将基于 Direct Show 相机的 SDK 移植到 MFT 在我的旧代码中 我有 KSProxy 接口 如 IksTopolgy IKsControl 和 IKsProperty IksTopolgy IKsControl 用于枚
  • 如何在 JavaScript 中将值从一个 html 页面传递到另一个页面?

    我知道这个问题问了很多次 但我的问题有所不同 我有 3 个 html 页面 例如apply html personal info html resume info html 在 apply html 页面中 我使用一个 LinkedIn 按
  • 从 android init.rc 执行静态程序

    我想在以下位置启动一个自定义程序init过程 我静态编译了这个程序 它可以在我启动的 android stock ROM 中正常运行 来自安卓init rc我读到的文档exec命令是我需要的 顺便说一句 我能看到的都是dmesg我的程序退出
  • 如何在Azure功能上安装apt-get包

    在 Linux 消费计划上运行 python Azure 函数 我已经能够使用 VS Code 成功将该函数部署到 Azure requirements txt 中的所有包都可以顺利安装 但现在我需要安装tesseract 它只能通过apt
  • 是否可以对特定于浏览器的 CSS 使用 mixin

    我正在寻找一种使用 mixin 进行特定于浏览器的 CSS hack 的解决方案 我正在使用 JavaScript 在 HTML 类中添加浏览器标签 喜欢 ie ie7 ie8 ie9 我想使用 mixin 像 box test margi
  • 创建自定义 DatePicker 对话框

    要求 当用户单击 TextView 时 应打开一个日期选择器 选择的默认日期应该是 TextView 中的日期 如果日期是过去的日期 则应禁用 DatePicker 对话框的 设置 按钮 如果可点击的 TextView 为空 则 DateP
  • 数据库驱动类动态加载

    我想用 java 开发一个与数据库无关的应用程序 我选择hibernate作为ORM jdbc的问题在于 它只是一个接口 我们需要在类路径中包含db的驱动程序类 由于数据库应该是可配置的 我必须动态加载数据库的驱动程序类 用户应该将驱动程序
  • graphviz - 如何在矩形布局中以循环方式排列节点?

    预脚本 就在我完成这些示例时 我看到了 往返 流程主题 https stackoverflow com questions 18877045 graphviz how to create a roundtrip flow 看起来不错 既然我
  • 图片上方半透明div

    我有一个角色的 PNG 图像 我想要类似的东西 http www swfcabin com open 1364482220 http www swfcabin com open 1364482220 如果有人点击角色身体的一部分 它将被 选
  • Django REST Framework - 如何返回 404 错误而不是 403

    仅当用户经过身份验证并且满足某些其他条件时 我的 API 才允许访问 任何请求 某些对象 class SomethingViewSet viewsets ModelViewSet queryset Something objects fil
  • 我们有专门针对 Spring 5.x 的 XSD 吗?

    谁能告诉我 Spring 5 版本的 XSD 是否可用 有没有类似的东西spring beans 5 1 xsd spring context 5 1 xsd spring mvc 5 1 xsd or spring beans 5 0 x
  • C++ Linux 与另一个程序交互 stdin / stdout

    我在 Linux 中有一个可以与 stdin stdout 交互的可执行文件 我正在尝试用 C 编写一个程序 它可以交互地调用该程序 向其标准输入发送命令 并捕获其标准输出 我真的很困惑 我不想分叉我的程序 是吗 我确实希望我的程序能够启动