use*_*035 6 c# pipe .net-core .net-6.0
我想在 Linux 中使用 .net6 创建一个命名管道(“mkfifo”)。
使用NamedPipeServerStream类对我没有帮助,因为它创建一个套接字文件而不是管道。
这将创建一个套接字:
var notAPipeButsocket = new NamedPipeServerStream("/tmp/my.notpipe", PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
notAPipeButsocket.WaitForConnection();
Run Code Online (Sandbox Code Playgroud)
看来微软选择在 Linux 中使用套接字显式实现“NamedPipeServerStream”:Why not use Unix Domain Sockets for Named Pipes?
如何在Linux中使用.net6创建真正的命名管道文件并写入其中?
上下文:我想用 WireShark 打开管道。
到目前为止,我发现如何从 .net6 创建命名管道 (mkfifo) 的唯一方法是使用 Mono:
https://github.com/dotnet/runtime/issues/24390#issuecomment-384650120
您可以使用 .NET Core 上的 Mono.Posix.NetStandard 库来访问 mkfifo POSIX 命令。这将允许您的程序读取/写入 FIFO/Unix 命名管道。
要在命名管道中写入,您可以简单地使用 FileStream,如下所示:
using FileStream fs = File.OpenWrite(namedPipePath);
fs.WriteByte(134);
Run Code Online (Sandbox Code Playgroud)
请注意,此调用将阻塞,直到其他人(另一个进程或任何人)开始读取它。
就我而言,写入管道就足够了,而无需在 .net6 中创建它,因为我可以通过 .net6 创建它的终端mkfifo。
编辑
我找到了创建管道的解决方案。只需使用 Process 类:
ProcessStartInfo startInfo = new ProcessStartInfo("mkfifo");
startInfo.Arguments = "pathtonamedpipe";
Process.Start(startInfo);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1702 次 |
| 最近记录: |