【发布时间】:2019-11-11 14:06:00
【问题描述】:
我想在磁盘上使用 Linux 的类 fifo 流(使用 mkfifo 创建)和 C# 代码(dotnet 核心)。我正在寻找使用磁盘上数据的示例,但我无法找到这些示例。
我想对磁盘上的 fifo 数据(例如 first.raw)进行一些修改,并使用另一个工具/任务(用 dotnet core 编写)读取该 fifo 并进行另一个修改并将其发送到另一个 fifo 数据(例如second.raw),最后通过使用第三个工具/任务读取 second.raw 数据对其进行修改并发送到另一个 fifo 数据(例如third.raw)以由另一个工具读取。
是否可以在 Linux 上使用 dotnet core?在 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 来停止应用程序的执行。
【问题讨论】:
-
请向我们展示您的尝试
-
在 Linux 或 UNIX 上(几乎)一切都是文件,因此您可以像打开任何其他文件一样打开 FIFO。
open将阻塞直到另一端也打开它,如果 FIFO 缓冲区分别为空或已满,read或write操作可能会阻塞。您无法修改 磁盘上的 FIFO 数据,您只能从 FIFO 读取数据,对其进行修改并将其写入其他位置,例如到另一个 FIFO。mkfifo创建的 FIFO是命名管道。 -
管道是标准输入/输出。在 c# 标准输入/输出是 Console.Read() 和 Console.Write()。