我想在Linux中使用.net6创建一个命名管道("mkfifo")。
使用类NamedPipeServerStream无助于创建套接字文件,而不是管道。
这将创建一个套接字:
var notAPipeButsocket = new NamedPipeServerStream("/tmp/my.notpipe", PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
notAPipeButsocket.WaitForConnection();微软似乎选择了使用linux:为什么不对命名管道使用Unix域套接字呢?中的套接字显式地实现“为什么不对命名管道使用Unix域套接字呢?”。
如何在Linux中使用.net6创建真正的命名管道文件并在其中编写?
上下文:我想用WireShark打开管道。
发布于 2021-12-19 16:53:07
到目前为止,我发现从.net6中创建命名管道(mkfifo)的唯一方法是使用Mono:
https://github.com/dotnet/runtime/issues/24390#issuecomment-384650120
您可以使用Mono.Posix.NetStandard核心上的.NET库来访问mkfifo命令。这将允许您的程序读取/写入FIFO/Unix命名管道。
要在命名管道中编写,只需使用FileStream,如下所示:
using FileStream fs = File.OpenWrite(namedPipePath);
fs.WriteByte(134);请注意,此调用将被阻塞,直到其他人开始读取它(另一个进程,或其他人)。
在我的例子中,不需要在.net6中创建管道就足够了,因为我可以通过mkfifo创建它的终端。
编辑
我找到了一个创建管道的解决方案。只需使用Process类:
ProcessStartInfo startInfo = new ProcessStartInfo("mkfifo");
startInfo.Arguments = "pathtonamedpipe";
Process.Start(startInfo);https://stackoverflow.com/questions/70411880
复制相似问题