我正在编写的程序在Linux中使用FIFO管道进行进程间通信。这种方法可能不太正常,但无论如何我仍然遇到了一些问题。
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或两者同时),程序就会挂起。没有错误或任何提示。在调试器中也是如此。
最好的部分是...它曾经可以工作。我曾经让进程间通信工作了,然后它就突然停止了。我注释掉了除了你在这里看到的之外的所有内容,重新启动了系统,重新创建了管道等等,但无济于事。怎么回事?我的代码有问题还是系统上其他东西在干扰?