如何在 linux 中使用 .net6 创建命名管道 (mkfifo)?
How to create named pipe (mkfifo) with .net6 in linux?
我想在 Linux.
中使用 .net6 创建命名管道(“mkfifo”)
使用 class NamedPipeServerStream 对我没有帮助,因为它创建的是套接字文件而不是管道。
这将创建一个套接字:
var notAPipeButsocket = new NamedPipeServerStream("/tmp/my.notpipe", PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
notAPipeButsocket.WaitForConnection();
Microsoft 似乎选择使用 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
You can use the Mono.Posix.NetStandard library on .NET Core to get
access to the mkfifo POSIX command. This will allow your program to
read/write to a FIFO/Unix named pipe.
要在命名管道中写入,您可以像这样简单地使用 FileStream:
using FileStream fs = File.OpenWrite(namedPipePath);
fs.WriteByte(134);
请注意,此调用将阻塞,直到其他人开始读取它(另一个进程或任何人)。
在我的例子中,无需在 .net6 中创建它就可以写入管道,因为我可以通过 mkfifo
.
创建它的终端
编辑:
我找到了创建管道的解决方案。简单地使用过程 class:
ProcessStartInfo startInfo = new ProcessStartInfo("mkfifo");
startInfo.Arguments = "pathtonamedpipe";
Process.Start(startInfo);
我想在 Linux.
中使用 .net6 创建命名管道(“mkfifo”)使用 class NamedPipeServerStream 对我没有帮助,因为它创建的是套接字文件而不是管道。
这将创建一个套接字:
var notAPipeButsocket = new NamedPipeServerStream("/tmp/my.notpipe", PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
notAPipeButsocket.WaitForConnection();
Microsoft 似乎选择使用 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
You can use the Mono.Posix.NetStandard library on .NET Core to get access to the mkfifo POSIX command. This will allow your program to read/write to a FIFO/Unix named pipe.
要在命名管道中写入,您可以像这样简单地使用 FileStream:
using FileStream fs = File.OpenWrite(namedPipePath);
fs.WriteByte(134);
请注意,此调用将阻塞,直到其他人开始读取它(另一个进程或任何人)。
在我的例子中,无需在 .net6 中创建它就可以写入管道,因为我可以通过 mkfifo
.
编辑:
我找到了创建管道的解决方案。简单地使用过程 class:
ProcessStartInfo startInfo = new ProcessStartInfo("mkfifo");
startInfo.Arguments = "pathtonamedpipe";
Process.Start(startInfo);