Win32 API 中与 Posix popen() 等效的函数是什么?
- 2024-10-10 08:38:00
- admin 原创
- 75
问题描述:
Win32 API 中是否有与 Linux/Unix stdio.h popen() 函数大致相同的函数?如果有,我在哪里可以找到它?
编辑:我需要知道这一点才能修补 D 标准库中的遗漏。任何答案都必须仅使用标准 Win32 API,不能使用 MSVC 特定的函数。此外,如果存在的话,我更喜欢不是太低级的东西。
解决方案 1:
MSDN 在Pipe Handle Inheritance中解释了如何使用 Windows API 执行 popen 的操作。这里_popen
提供了一个有据可查的示例。它比Jason 链接的运行时库中的函数低级得多,但仅使用 Win32 API。
解决方案 2:
如果您正在编写控制台应用程序,则可以调用_popen
。有关更多信息,请参阅 MSDN 网站上的文档:http ://msdn.microsoft.com/en-us/library/96ayss4b(VS.80).aspx
解决方案 3:
遗憾的是这并不是特别容易。
您需要使用 win32 函数(CreatePipe)创建一个管道,然后通常需要复制提供给子进程的管道末端(DuplicateHandle)以允许它被继承,否则它将无法被使用。
然后,您需要使用 CreateProcess(它需要大量结构指针,包括 STARTUPINFO)创建一个进程,并将您已复制为其标准输出的句柄传递给 STARTUPINFO。
然后您可以从管道的读取端(ReadFile 等)读取直到到达 eof,然后您需要通过关闭所有各种 win32 句柄进行清理。
解决方案 4:
挖出一条旧线索...
针对 Jason Coco 的上述回复,与链接的 MSDN 页面声称的相反,现在显然可以从非控制台应用程序调用 _popen()。我从 QuickTime 导入器组件调用它,基本上是一个伪装的 DLL。它打开一个控制台窗口,但除此之外显示了预期的行为。使用 mingw32 的 -mwindows 选项编译标准控制台工具以使其成为 GUI 应用程序,_popen 继续正常工作(但即使从另一个控制台运行该工具也会打开控制台窗口)。
解决方案 5:
这是一篇旧帖子,但几年前我也需要在 Windows 环境中使用类似popen() 的调用。正如此处答案中的几条评论所指出的那样,使用 Windows API 实现任何接近经典 POSIX 的东西popen()
都很有趣。
我创建了一个实现并提交给Code Review。此实现使用了pipes
tostdin
和 fromstdout
以及 Windows 方法CreateProcess(...)
。
链接代码被设计为以非常小的 API 构建到 dll 中。
int __declspec(dllexport) cmd_rsp(const char *command, char **chunk, unsigned int size);
简单使用示例:
#include "cmd_rsp.h"
int main(void)
{
char *buf = {0};
buf = calloc(100, 1);
if(!buf)return 0;
cmd_rsp("dir /s", &buf, 100);
printf("%s", buf);
free(buf);
//or a custom exe
char *buf2 = {0};
buf2 = calloc(100, 1);
cmd_rsp("some_custom_program.exe arg_1 arg_2 arg_n", &buf2, 100);
printf("%s", buf2);
free(buf2);
return 0;
}
它接受任何命令(例如,从 发出的命令stdin
),创建一个单独的进程来执行该命令,然后将所有响应内容(如果有)返回到缓冲区,并且执行此操作时不会显示 CMD 窗口弹出窗口。缓冲区会根据需要增大以适应响应的大小。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件