如何在单个应用程序上使用win32管道
How to use win32 pipe on single application
我正试图写入本地创建的管道(在同一应用程序中)
目前我有这个:
audioPipe = CreateNamedPipe(
L"\\.\pipe\audioPipe", // name of the pipe
PIPE_ACCESS_OUTBOUND, // 1-way pipe -- send only
PIPE_TYPE_MESSAGE, // send data as a byte stream
1, // only allow 1 instance of this pipe
0, // no outbound buffer
0, // no inbound buffer
0, // use default wait time
NULL // use default security attributes
);
我不知道如何实际向它写入数据。我想使用WriteFile()
,但它还有更多的数据吗?我读到的所有例子似乎都在使用客户端-服务器系统,我不需要它。我只需要将数据写入管道(希望ffmpeg能接收到)
根据注释,您正在创建一个命名管道,命令行FFMPEG应用程序将连接到该管道。为了使其工作,您需要做三件事:
-
将您的呼叫更改为
CreateNamedPipe()
以使用PIPE_TYPE_BYTE
而不是PIPE_TYPE_MESSAGE
,因为您将实时将原始数据流式传输到FFMPEG,而不是消息。这将允许FFMPEG使用它想要的任意缓冲区等从管道中读取数据,就像它直接从真实文件中读取一样。audioPipe = CreateNamedPipe( L"\\.\pipe\audioPipe", // name of the pipe PIPE_ACCESS_OUTBOUND, // 1-way pipe -- send only PIPE_TYPE_BYTE, // send data as a byte stream 1, // only allow 1 instance of this pipe 0, // no outbound buffer 0, // no inbound buffer 0, // use default wait time NULL // use default security attributes );
-
您需要调用
ConnectNamedPipe()
接受来自FFMPEG的连接,然后才能向其写入数据。ConnectNamedPipe(audioPipe, NULL);
-
运行FFMPEG时,使用
-i
参数指定管道名称作为输入文件名,例如:ffmpeg -i \.pipeaudioPipe
。
没有什么比调用WriteFile
更重要的了。您还需要先调用ConnectNamedPipe
,然后再调用WriteFile
以等待客户端连接。
客户端通过使用CreateFile
打开句柄,然后使用ReadFile
进行读取来读取管道。
对于字节流,您需要PIPE_TYPE_BYTE
。是否确实要为缓冲区大小指定0?
相关文章:
- Win32编译器选项和内存分配
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- IPC使用多个管道和分支进程来运行Python程序
- C++win32 API创建多个类似视口的窗口
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 检测win32服务创建和删除的最佳方法
- WIN32:C++,为什么在WM_CLOSE上调用Messagebox函数程序正在冻结
- 如何创建函数管道,以便函数一个接一个地运行?
- Gstreamer 管道从命令 lne 到 c 代码
- 将 win32 hbitmap 转换为 winrt softwarebitmap
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- VSCode C++ 编译的exe感染了Win32:TrojanX-gen[Trj]
- 从预处理器获取 Windows 版本(C++ Win32)
- 在Win32管道上将两个缓冲区合并为一个写操作
- ReadFile(客户端命名管道)挂起-Win32 VC++
- 如何在单个应用程序上使用win32管道
- 使用匿名管道的PeekNamePipe()的替代方案-WIN32
- 从 C++ win32 程序连接到命名管道时出现问题