首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在linux中使用.net6创建命名管道(mkfifo)?

如何在linux中使用.net6创建命名管道(mkfifo)?
EN

Stack Overflow用户
提问于 2021-12-19 13:31:44
回答 1查看 773关注 0票数 5

我想在Linux中使用.net6创建一个命名管道("mkfifo")。

使用类NamedPipeServerStream无助于创建套接字文件,而不是管道。

这将创建一个套接字:

代码语言:javascript
复制
var notAPipeButsocket = new NamedPipeServerStream("/tmp/my.notpipe", PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
        notAPipeButsocket.WaitForConnection();

微软似乎选择了使用linux:为什么不对命名管道使用Unix域套接字呢?中的套接字显式地实现“为什么不对命名管道使用Unix域套接字呢?”。

如何在Linux中使用.net6创建真正的命名管道文件并在其中编写?

上下文:我想用WireShark打开管道。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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命名管道。

https://github.com/mono/mono/blob/47187bbc9b552f6ca5b2d80a2be6c7395b40da9e/mcs/class/Mono.Posix/Mono.Unix.Native/Syscall.cs#L4013-L4017

要在命名管道中编写,只需使用FileStream,如下所示:

代码语言:javascript
复制
using FileStream fs = File.OpenWrite(namedPipePath);
fs.WriteByte(134);

请注意,此调用将被阻塞,直到其他人开始读取它(另一个进程,或其他人)。

在我的例子中,不需要在.net6中创建管道就足够了,因为我可以通过mkfifo创建它的终端。

编辑

我找到了一个创建管道的解决方案。只需使用Process类:

代码语言:javascript
复制
ProcessStartInfo startInfo = new ProcessStartInfo("mkfifo");
startInfo.Arguments = "pathtonamedpipe";
Process.Start(startInfo);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70411880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档