C# 在Windows中读/写linux命名管道(fifo)

C# 在Windows中读/写linux命名管道(fifo),c#,linux,windows,fifo,smb,C#,Linux,Windows,Fifo,Smb,我想使用C#在Windows应用程序的SMB共享上读取和写入Linux中创建的fifo。似乎如果我尝试直接使用StreamReader从管道中读取,就像它是一个普通文件一样,那么它将到达流的末尾,而不会实际检索任何数据。如果我尝试使用NamedPipeClientStream,它会抛出一个IOException声明已访问一个卷,该卷需要一个尚未加载的文件系统驱动程序。这让我觉得这可能不可行。Windows中的命名管道与Linux完全不同吗?如果是这样,我可以将其视为普通文件吗 以下是我首先使用的

我想使用C#在Windows应用程序的SMB共享上读取和写入Linux中创建的fifo。似乎如果我尝试直接使用
StreamReader
从管道中读取,就像它是一个普通文件一样,那么它将到达流的末尾,而不会实际检索任何数据。如果我尝试使用
NamedPipeClientStream
,它会抛出一个
IOException
声明
已访问一个卷,该卷需要一个尚未加载的文件系统驱动程序。
这让我觉得这可能不可行。Windows中的命名管道与Linux完全不同吗?如果是这样,我可以将其视为普通文件吗

以下是我首先使用的代码:

StreamReader file = new StreamReader(@"\\mvssuperos7\shared\lread");
String line;
while ((line = file.ReadLine()) != null)
{
    Console.WriteLine(line);
}

file.Close();
Console.WriteLine("Finished");
Console.ReadLine();
相当直截了当;在Linux系统中,我有一个文本文件,其中有几行无意义的内容,我将它们添加到管道中。正如我所期望的那样,这会阻塞,然后我运行列出的代码,它会打印“Finished”,就像它到达流的末尾一样。这也解除了Linux端的
cat
,我觉得这很不稳定

下面是我与
NamedPipeClientStream一起使用的代码:

StreamReader file = new StreamReader(@"\\mvssuperos7\shared\lread");
using (NamedPipeClientStream pipeClient =
new NamedPipeClientStream(@"mvssuperos7", "shared/lread", PipeDirection.In))
{

// to the pipe or wait until the pipe is available.
Console.Write("Attempting to connect to pipe...");
pipeClient.Connect();

Console.WriteLine("Connected to pipe.");
Console.WriteLine("There are currently {0} pipe server instances open.",
pipeClient.NumberOfServerInstances);
using (StreamReader sr = new StreamReader(pipeClient))
{
    // Display the read text to the console
    string temp;
    while ((temp = sr.ReadLine()) != null)
    {
        Console.WriteLine("Received from server: {0}", temp);
    }
}

这就是引发异常的原因——我假设Windows命名管道不是我在这里寻找的,我将不得不阅读更多关于它们的内容。非常感谢您的帮助。

Linux管道不是Windows管道。看见为什么streamreader不工作?或者是真的吗?无论我通过管道发送什么,streamreader似乎都会立即到达流的末尾。我不确定我的代码是否出错,或者这种类型的东西是否不起作用。到目前为止,我读到的是,fifo Linux管道只存在于内存中,因此没有内容写入磁盘。使用StreamReader,您正在读取磁盘。嗯,我想这可能不可能,除非SMB服务(Samba?)明确支持这样做,否则它几乎肯定不会工作。Linux管道不是Windows管道。看见为什么streamreader不工作?或者是真的吗?无论我通过管道发送什么,streamreader似乎都会立即到达流的末尾。我不确定我的代码是否出错,或者这种类型的东西是否不起作用。到目前为止,我读到的是,fifo Linux管道只存在于内存中,因此没有内容写入磁盘。使用StreamReader,您正在读取磁盘。嗯,我想这可能是不可能的,除非SMB服务(Samba?)明确支持这样做,否则它几乎肯定不会工作。