【问题标题】:How can I use one of the undefined handles in my C program on Windows?如何在 Windows 上的 C 程序中使用未定义的句柄之一?
【发布时间】:2011-03-26 15:01:02
【问题描述】:

我在 Windows XP 上的 C 程序中使用的封闭源代码库中的密码提示函数将提示写入 stdout(句柄 1)并将任何错误消息写入 stderr(句柄 2)。

现在,我希望能够使用正常的重定向运算符重定向 我的函数 产生的输出。

根据this,句柄 3-9“由应用程序单独定义”。在我看来,我可以在我的程序中使用其中之一,然后使用正常的重定向运算符(例如 myprogram.exe 3| otherprogram.exe 之类的东西)。

如何在我的 C 代码中做到这一点?

【问题讨论】:

  • 不清楚你想要实现什么。你能详细说明一下吗?
  • 我想将我的函数的一些输出通过管道传输到另一个程序。由于这个我无法控制的密码提示功能可以同时写入标准输出和标准错误,我想我可以使用其他句柄之一。但是我该如何使用它们呢? stdout 和 stderr 是预定义的,可以很容易地与fprintf 一起使用。其他人不能:像fprintf(3, ... 这样的代码会使我的程序崩溃。

标签: c windows handle cmd


【解决方案1】:

在 Windows 上?好吧,如果你使用 posix 兼容库,你可以使用 'dup2' 来强制使用文件描述符 3。我不能保证 cmd.exe 会知道你在说什么。

从根本上说,在这里,您看到的是 Windows 上对 Unix/Linux 的一点点羡慕。小整数描述符数字的概念是基本的 Unix/Linux 事物。它不是 Windows 的功能。 cmd.exe 知道如何处理 0、1 和 2 的事实很可能是为放错位置的 Unix shell 程序员提供了便利,这并没有推广到其他数字。

【讨论】:

  • 我链接的 microsoft.com 站点 (this) 提供了在 cmd.exe 中使用高于 2 的句柄的示例。必须有某种方法可以在 C 程序中使用这些句柄。
  • 然后是 posix 兼容性库和 dup2,适合您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-21
相关资源
最近更新 更多