簡體   English   中英

如何在 linux 中使用 .net6 創建命名 pipe (mkfifo)?

[英]How to create named pipe (mkfifo) with .net6 in linux?

我想在 Linux 中使用 .net6 創建一個名為 pipe(“mkfifo”)。

使用 class NamedPipeServerStream對我沒有幫助,因為它創建了一個套接字文件而不是 pipe。

這將創建一個套接字:

var notAPipeButsocket = new NamedPipeServerStream("/tmp/my.notpipe", PipeDirection.Out, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous);
        notAPipeButsocket.WaitForConnection();

微軟似乎選擇在 linux 中使用 sockets 顯式實施“NamedPipeServerStream”:為什么不使用 Unix 域 Z0E188AE3EE5A248407D 命名管道?

如何在 Linux 中使用 .net6 創建一個真實命名的 pipe 文件並寫入其中?

上下文:我想用 WireShark 打開 pipe。

到目前為止,我發現如何從 .net6 創建名為 pipe (mkfifo) 的唯一方法是使用 Mono:

https://github.com/dotnet/runtime/issues/24390#issuecomment-384650120

您可以使用 .NET Core 上的 Mono.Posix.NetStandard 庫來訪問 mkfifo POSIX 命令。 這將允許您的程序讀取/寫入名為 pipe 的 FIFO/Unix。

https://github.com/mono/mono/blob/47187bbc9b552f6ca5b2d80a2be6c7395b40da9e/mcs/class/Mono.Posix/Mono.Z6EC1BD1EA6A5D67A63B20C8F61cs7#LDDZ1.

要寫入命名的 pipe,您可以像這樣簡單地使用 FileStream:

using FileStream fs = File.OpenWrite(namedPipePath);
fs.WriteByte(134);

請注意,此調用將阻塞,直到其他人開始讀取它(另一個進程或任何人)。

在我的情況下,無需在 .net6 中創建它就足以寫入 pipe ,因為我可以通過mkfifo創建它終端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM