【问题标题】:How to create a pipe in c under Windowswindows下如何在c中创建管道
【发布时间】:2014-12-29 21:15:39
【问题描述】:

我正在尝试在我的 c 程序中创建一个管道来将数据输入到另一个程序 myProgram.exe。我需要做的就是让 myProgram 运行并从主程序发送“退出”。问题是我不知道如何在 c 中创建管道。

我在某处找到了一个有效的 Perl 示例:

open(myHandle, ".../myProgram.exe");
//... (do something else) ...
printf(myHandle, "quit");
close(myHandle);

有人可以帮我把它翻译成c代码吗?请记住,我在 Windows 下运行,因此没有可用的 unistd.h。

干杯,B

【问题讨论】:

  • 参见 CreateNamedPipe 函数。但是,对于像这样的简单消息,最好使用命名事件。
  • 你不能使用其他机制吗?
  • 对不起,我不明白。如果我调用 CreateNamedPipe,如何指定要在哪个程序中进行管道传输?你能发布一个代码示例吗?谢谢

标签: c windows pipe


【解决方案1】:

我最近发布了一个如何为进程间通信创建管道的简单示例:

见Create Named Pipe C++ Windows

【讨论】:

  • 感谢您的示例。我有一个简单的问题:要将客户端连接到管道,我是否必须编辑客户端程序中的代码(使用 CreateFile 等添加行)?我想为我的客户提供一些输入,但就我而言,我有来自其他地方的客户端程序,我真的不想更改那里的代码中的任何内容。希望你能理解我的问题。
  • 是的,你必须这样做。如果您不想更改其他应用程序,您可以使用 STDOUT/STDIN 的新句柄创建应用程序。查看STARTUPINFO结构和函数CreateProcess(..)的属性文档。
  • 谢谢卢卡斯。我按照您的建议将新句柄设置为 STDOUT/STDIN。我改变了这个example。我没有对我的客户程序进行任何更改。我设法让它运行,并且向它传递的命令不超过一个命令。这不是最佳的,但对于我的需要来说已经足够了。
【解决方案2】:

也许这会有所帮助:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365780(v=vs.85).aspx

那里有很多关于windows下管道的信息。

另见:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365781(v=vs.85).aspx

WINAPI中管道相关函数列表

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2018-11-12
    • 2019-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多