如何打开/使用文件描述符

时间:2011-01-07 15:23:57

标签: c# file-io stdout stdin file-descriptor

我有一个特殊的问题,我有一些我无法修改的程序,但它提供了一些我想在办公室内使用的功能。所以我正在为Office编写一个插件来获取我的文档,在后台执行程序,将文档放在stdin上。该程序写入stdout,我把它带回我的程序发布进程。

除了程序要求输入我不想放在stdin上的密码外,一切正常。该工具有一种从任何其他输入流中读取密码的方法,但它需要从中读取的文件描述符的编号。

所以这是我的问题:我如何(在.net环境中)在文件描述符上打开一个流,我可以将该数字作为参数提供给该程序?理想情况下,我想写一些类似的东西:

process.start("start-program --password-fd " + x);
stream = new StreamWriter(x);
stream.write("secritpwd");
等等......(但随后进行了神奇的修正以便它能够正常工作;))

我希望有人可以帮助我。

由于

3 个答案:

答案 0 :(得分:1)

文件描述符不是Windows的一部分 - 它们是C运行时库的一部分。您必须使用C或C ++编写DLL来执行文件I / O,然后从C#程序中调用它。从C DLL获取文件描述符号以传递给您的其他代码。

答案 1 :(得分:1)

我不确定这个应用程序对“文件描述符”的确切含义,但您可以传递可继承匿名管道的句柄。见AnonymousPipeServerStream。 (这假设您至少使用.NET 3.5。)

基本大纲将是这样的:

  • 实例化AnonymousPipeServerStream。
  • 将管道句柄(pipeServer.GetClientHandleAsString())作为命令行参数传递给C可执行文件。
  • 写入AnonymousPipeServerStream。

答案 2 :(得分:0)