使用dotnet核心在Linux上使用FIFO数据

我想在磁盘上使用C#代码(dotnet核心)使用Linux上类似fifo的流(通过使用mkfifo创建)。我正在寻找有关在磁盘上使用数据的示例,但在查找示例时遇到了麻烦。

我想对磁盘上的fifo数据进行一些修改(例如first.raw),并使用另一个工具/任务(以dotnet内核编写)读取该fifo并进行另一次修改,然后将其发送给另一个fifo数据(例如second.raw),最后通过使用第三个工具/任务读取了second.raw数据,将其修改并发送到另一个fifo数据(例如,third.raw)以由另一个工具读取。

在Linux上可以使用dotnet内核吗?在Linux(队列,命名管道)上有什么正确的方法吗?

编辑
当我在Ubuntu 18.04上执行此操作时(运行之前:mkfifo fifoStream.pipe):

FileStream fs = File.OpenWrite( "fifoStream.pipe" );  
using (var sw = new StreamWriter(fs))  
{  
  sw.WriteLine("first line");  
  sw.Flush();
}    
fs.Close();  

并挂起运行代码,我必须使用ctrl + c停止执行该应用程序。

wangzhenhua7 回答:使用dotnet核心在Linux上使用FIFO数据

我找到了适用于Ubuntu 18.04的解决方案。 按照:https://johnkoerner.com/csharp/IPC-in-net-core-using-protobuf/ 这适用于我的情况:

首次运行“服务器”代码:

static void Main(string[] args)
{
    Console.WriteLine("Starting Server");

    var pipe = new NamedPipeServerStream("fifoStream.pipe",PipeDirection.InOut);
    Console.WriteLine("Waiting for connection....");
    pipe.WaitForConnection();

    Console.WriteLine("Connected");
    pipe.WriteByte(66);
    pipe.Disconnect();
}

然后运行“客户端”代码:

static void Main(string[] args)
{
    Console.WriteLine("Starting Client");
    var pipe = new NamedPipeClientStream(".","fifoStream.pipe",PipeDirection.InOut,PipeOptions.None);
    Console.WriteLine("Connecting");
    pipe.Connect();
    pipe.ReadByte(); //here I receive byte 66

    Console.WriteLine("Done");
}
本文链接:https://www.f2er.com/3123657.html

大家都在问