在 Windows 上可以使用什么来代替 Unix 管道进行进程间通信?

2023-12-10

我有一个启动子进程的应用程序。子进程从标准输入读取要操作的文件。对于某些操作,它需要一个输入文件,其中包含有关如何处理其操作的文件的信息 - 我们将其称为“控制文件”。控制文件的名称也是从 stdin 读取的。父应用程序可以使用临时文件作为控制文件,但我更愿意避免使用真正的磁盘支持文件。

在 Linux 上,这很简单:我可以创建一个 Unix 管道,分叉,在启动子进程之前关闭管道的相应端,然后使用/dev/fd/3(或任何文件描述符)作为控制文件名,然后将控制数据写入父应用程序中的管道。或者,我可以使用命名管道/tmp(管他呢)。

我怎样才能在 Windows 上实现类似的事情? Windows 提供的奇怪的“命名管道”可以用于此目的吗?也就是说,它们可以被常用的 C 库读取吗?fread()功能?如果是,我应该使用什么文件名来访问它们?或者有比使用命名管道更好的方法吗?

(子进程是exiftool命令行实用程序以批处理模式运行,所以我无法控制它。父应用程序是用 Python 编写的。)


Update:

@Harry Johnston 指出我误读了你的问题 - 你不想修改子流程。在这种情况下,您可以尝试致电CreateProcess并填写hStdInput成员STARTUPINFO with a HANDLE from CreateNamedPipe.

之前的回答:

一般来说,Windows CRT(C 运行时,或“libc“用 Unix 来说)是一个奇怪的野兽:它是 C 标准库的一个非常“准系统”的填充程序,其中添加了一些额外的东西,维护得不是很好,并且没有暴露很多 Windows 可以做的事情。最自然的方式用 C 语言编写 Windows 软件是 Win32 API。也就是说:

Could the strange "named pipes" Windows offers be used for this, that is, can they be read from by the usual C library fread() function?

是的,我相信你可以做到这一点_open_osfhandle,其中第一个参数可以是HANDLE。这会给你一个整数,这是 Windows CRT 对 Unix 文件描述符的奇怪嘲笑。然后你可以得到一个FILE* with _fdopen.

If yes, what file name do I use to access them?

我想你可以尝试生成一个不会发生碰撞的随机的。也许可以在它前面加上应用程序的名称作为前缀,并采用进程 ID 和当前时间的某种组合?这只是我要扔掉的东西。

Or is there a better way than using named pipes?

您可以使用套接字AF_UNIX家庭,虽然最终会非常相似......

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

在 Windows 上可以使用什么来代替 Unix 管道进行进程间通信? 的相关文章

  • 将node.js +expressjs应用程序的NODE_ENV设置为ubuntu下的守护进程

    我按照这些说明让守护进程正常工作 http kevin vanzonneveld net techblog article run nodejs as a service on ubuntu karmic http kevin vanzon
  • 在 debian wheezy amd64 上安装 ia32-libs

    我正在使用 Debian 7 喘息 amd64 uname a Linux tzwm debian 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 我想安装ia32 libs在我的
  • 如何在 Linux/OS X 上温和地终止 Firefox 进程

    我正在使用 Firefox 进行一些自动化操作 尽管我可以从 shell 打开 Firefox 窗口 但我无法正确终止它 如果我kill火狐进程与kill 3 or kill 2当我下次打开新的 Firefox 窗口时 命令会询问我是否要在
  • 如何获取subprocess.run启动的进程的pid并杀死它

    我使用的是 Windows 10 和 Python 3 7 我运行了以下命令 import subprocess exeFilePath C Users test test exe subprocess run exeFilePath 使用
  • 裸机交叉编译器输入

    裸机交叉编译器的输入限制是什么 比如它不编译带有指针或 malloc 的程序 或者任何需要比底层硬件更多的东西 以及如何才能找到这些限制 我还想问 我为目标 mips 构建了一个交叉编译器 我需要使用这个交叉编译器创建一个 mips 可执行
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • 在非实时操作系统/内核上执行接近实时任务的最佳方法是什么?

    在一台 GNU Linux 机器上 如果想要执行 实时 亚毫秒级时间关键 任务 您几乎总是必须经历漫长 复杂且容易出现问题的内核补丁过程 以提供足够的支持 1 http en wikipedia org wiki RTLinux Backg
  • R 控制台是我的母语,如何将 R 设置为英语?

    我在 Windows 7 上使用 R 显然 R 不知何故发现了我说英语以外的语言的证据 并且顽固地坚持在控制台中以我自己的语言提供输出 由于多种原因 这是不可取的 我希望 R 是英语 什么有效 我能够使用LANGUAGE en作为 R 控制
  • 如何在文件夹中的 xml 文件中 grep 一个单词

    我知道我可以使用 grep 在这样的文件夹中的所有文件中查找单词 grep rn core 但我当前的目录有很多子目录 我只想搜索当前目录及其所有子目录中存在的所有 xml 文件 我怎样才能做到这一点 我试过这个 grep rn core
  • Visual C++ free 和 malloc 的线程安全性?

    有谁知道 free 和 malloc 在 Visual C 2010 上是否是线程安全的 我遇到了奇怪的问题 内存被损坏 我几乎认为这是唯一的可能性 有谁知道安全装置是否可以打开和关闭以及如何打开和关闭 前提是您链接的是线程安全库 http
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 无法在 Windows 7 上安装 Android USB 驱动程序

    所以我想使用我的新 Nexus 5 来调试我的应用程序 我尝试通过以下方式安装 Android USB 驱动程序装置经理 http developer android com tools extras oem usb html Win7但我
  • WMI 不返回 Windows 7 64 上的所有安装程序

    今天 我们尝试使用以下脚本列出每个虚拟机上所有已安装的程序来查询 WMI 我们发现它会列出所有 64 位应用程序 以及一些 32 位应用程序 但并非所有应用程序 32 位 64 位 都会列出 param string ExportPath
  • endl 不适用于 wstring (unicode)

    这是代码 std ofstream f file1 txt f lt lt 123 lt
  • 如何在linux中使用iptables将http和https流量转发到透明代理[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题似乎不是关于主要由程序员使用的特定编程问题 软件算法或软件工具 help on topic 如果您认为该问题与主题相关另一个 St
  • Grep 递归和计数

    需要在具有大量子目录的目录中搜索文件内的字符串 我在用着 grep c r string here 我怎样才能找到总数量 如何仅输出至少具有一个实例的文件 使用 Bash 的进程替换 这给出了我认为是您想要的输出 如果不是 请澄清问题 gr
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • 使用“for”循环迭代目录中的所有文件

    如何使用 a 迭代目录中的每个文件for loop 我如何判断某个条目是目录还是文件 这会递归地列出当前目录及其子目录中的所有文件 并且仅列出文件 for r i in do echo i 此外 如果您在批处理文件中运行该命令 则需要将 符
  • 用于获取特定用户 ID 和进程数的 Bash 脚本

    我需要 bash 脚本来计算特定用户或所有用户的进程 我们可以输入 0 1 或更多参数 例如 myScript sh root deamon 应该像这样执行 root 92 deamon 8 2 users has total proces

随机推荐

  • 在同一字段上使用通配符的空白和数字的多个过滤条件不起作用

    尽管关于这个主题的问题很多 但我一直无法找到问题的解决方案 这可能是也可能不是我的错 我需要自动过滤一个范围以返回空格和以 614 开头的数字 该列已使用以下内容进行预格式化 Range B C NumberFormat 0 这是为了删除
  • 如何npm安装全局而不是root?

    我在一个 unix 机器上 没有 root 访问权限 我将 npmrc 文件 在用户的根目录中 更改为 prefix global npm 现在 当我执行 npm install g package name 时 它会安装在我的全局 npm
  • 根据列取两个列表的并集

    我正在使用 Linq to Sql 获取两个列表的并集 使用列表 1 和列表 2 var tr List1 Union List2 ToList 联合工作正常 但问题是它正在检查每一列并删除我想要的一些行 所以我想知道是否有一种方法可以仅基
  • C# 中的 GetType() 和 Typeof()

    itemVal 0 res int TryParse itemVal out num if res true num GetType typeof byte return true else return false goes here w
  • javascript - 如何将 unicode 字符串转换为 ascii [重复]

    这个问题在这里已经有答案了 如何将 unicode 字符串转换为 ascii 以便为友好的 url 制作一个漂亮的字符串 只有一个简短的字符列表可以在 URL 的路径组件中安全地传递 unreserved ALPHA DIGIT 所有其他字
  • 关闭所有 HTML 标签(不仅是 IMG)

    I saw this关于关闭 img 标签的问题和解答 但是 如果我还想关闭链接等其他标签怎么办 我试着写
  • 在哪里以及为什么使用 int a=new int?

    只是好奇 有什么区别 int A 100 and int A new int 我知道 new 用于在堆上分配内存 但我真的不明白这里的上下文 static void Main int A new int int B default int
  • PHP GD 锐度滤镜

    如何使用锐度滤镜制作锐度滤镜PHP GD图书馆 所以说这 转到这 如果不可能PHP 比其他语言有能力吗 我认为他想使用PHP的GD库 这很简单 函数 imageconvolution 只需在页面上搜索 锐化 您就会看到可用于锐化的矩阵 它工
  • 防止 ASP.NET 视图状态通过 GET 形式在查询字符串中传输

    我相信我已经禁用了所有控件以及页面本身的视图状态 但查询字符串仍然包含 viewstate 和 eventvalidation 参数 关于检查和 或更改内容有什么想法吗 关于视图状态 是否有一些我可能不知道的事情 很可能 导致视图状态以 G
  • Java RESTful Jersey 示例? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 是否有任何示例演示使用 J
  • C++ << 运算符重载,没有友元函数

    正如主题所说 有可能这样做吗 我能够通过重载 运算符来实现此目的 但是 我无法使用 这是适用于我的友元函数的代码示例 class Punkt2D int x y public Punkt2D int wartoscX int wartosc
  • 将 Excel 导出到 System.DataTable 时出现未知问题

    我正在尝试将数据从 Excel 文件获取到 DataTable 这是我的代码片段 FilePath WebConfig SavePath Book2 xls Create the connection object OleDbConnect
  • Angular.js 至少需要一个复选框[重复]

    这个问题在这里已经有答案了 如果这是重复的 我不会感到惊讶 但是我找不到任何符合我需要的简单内容 我所需要的只是要求用户至少选择一个复选框 但我对如何实现这一目标感到困惑
  • 如何使用 hibernate criteria api 执行 union 子句查询

    SELECT supplier id FROM suppliers UNION ALL SELECT supplier id FROM orders 我只是在查询的 UNION ALL 子句上方和查询的 UNION ALL 子句下方创建两个
  • 无法在设备 HTC6435LVW Droid DNA Deluxe 上检索 Build.MANUFACTURER

    这看起来是一个非常基本的问题 我无法检索一些基本信息 例如Build MANUFACTURER Build MODEL and Build VERSION RELEASE 我的代码可以在 50 多种设备上运行 但在以下情况下失败HTCC64
  • 与在电子邮件签名中实施图像相关的一些问题?

    我需要用图像实现电子邮件签名 到目前为止 我们只支持已经可以使用的电子邮件签名中的文本 我需要提供该功能 我可以在邮件签名中插入图像 我可以将电子邮件发送给我的应用程序中的用户 也可以发送给外部邮件域 如 gmail yahoo 等 上的用
  • 获取 JAX-RS 资源中的 ServletContext

    我正在玩 JAX RS 部署在 Tomcat 上 基本上是 Path hello Produces text plain public class Hellohandler GET public String hello return He
  • FILTER_SANITIZE_STRING 有何作用?

    有大约一百万个问答来解释这些选项 例如FILTER FLAG STRIP LOW 但是什么是FILTER SANITIZE STRING自己做 没有任何选择 它只是过滤标签吗 根据PHP手册 剥离标签 可选择剥离或编码特殊字符 根据W3学校
  • Android - 导航抽屉片段

    我已经在我的 Android 应用程序中实现了导航抽屉 但现在我希望能够在用户单击导航栏中的任何列表项时使用片段更改布局 这是我到目前为止所得到的 XML
  • 在 Windows 上可以使用什么来代替 Unix 管道进行进程间通信?

    我有一个启动子进程的应用程序 子进程从标准输入读取要操作的文件 对于某些操作 它需要一个输入文件 其中包含有关如何处理其操作的文件的信息 我们将其称为 控制文件 控制文件的名称也是从 stdin 读取的 父应用程序可以使用临时文件作为控制文