Программа, которую я пишу, использует каналы FIFO в linux для межпроцессного общения. В лучшем случае он довольно взломан, но независимо от того, у меня проблемы.
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 или с обоими), программа просто зависает. Ошибок нет. Он также зависает в отладчике.
Лучшая часть - это... она работала. У меня было взаимодействие между процессами, и тогда это просто необъяснимо остановилось. Я прокомментировал все, кроме того, что вы видите здесь, перезапустил мою систему, воссоздал трубы и т.д., Но безрезультатно. Что дает? Что-то не так с моим кодом или что-то еще в системе мешает?