我正在编写的程序是在Linux中使用FIFO管道进行进程间通信。充其量只是黑客,但不管我有问题。单声道在尝试打开StreamWriter到命名管道时挂起
if (!File.Exists(Path.GetTempPath() + "gminput.pipe"))
{
ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "/usr/bin/mkfifo", Arguments = Path.GetTempPath() + "gminput.pipe", };
Process proc = new Process() { StartInfo = startInfo, };
proc.Start();
proc.WaitForExit();
}
if (!File.Exists(Path.GetTempPath() + "gmoutput.pipe"))
{
ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "/usr/bin/mkfifo", Arguments = Path.GetTempPath() + "gmoutput.pipe", };
Process proc = new Process() { StartInfo = startInfo, };
proc.Start();
proc.WaitForExit();
}
using (StreamWriter outputPipe = new StreamWriter(Path.GetTempPath() + "gmoutput.pipe"))
using (StreamReader inputPipe = new StreamReader(Path.GetTempPath() + "gminput.pipe"))
{
Console.WriteLine("This code is never reached!");
}
我所做的只是检查管道是否已经存在,如果没有,请致电mkfifo创建它。这部分似乎工作正常,命名管道正确创建。每当我尝试打开它们(无论是StreamWriter,StreamReader,还是两者),该程序只是挂起。没有错误或任何东西。它也挂在调试器中。
最好的部分是......它曾经工作。我有进程间通信工作,然后它只是莫名其妙地停止。除了你在这里看到的东西,我重新评论了一切,重新启动了我的系统,重新创建了管道等,但都无济于事。是什么赋予了?我的代码有什么问题,或者系统上的其他内容有干扰?
我不知道它是否会对您有所帮助,但我在过去曾将问题连接在一起的问题。有一天它工作,下一个不行!对我来说,解决方案是在路径上使用Path.Combine(...),这可以阻止不一致的行为。 –