[英]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.