繁体   English   中英

使用 dotnet core 在 linux 上处理 fifo 数据

[英]working with fifo data on linux using dotnet core

我想在磁盘上使用 Linux 的类似 fifo 的 stream(使用 mkfifo 创建)和 C# 代码(dotnet 核心)。 我正在寻找使用磁盘上数据的示例,但我很难找到。

我想对磁盘上的fifo数据(例如first.raw)进行一些修改,并使用另一个工具/任务(用dotnet core编写)读取该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 来停止应用程序的执行。

我找到了 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");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM