Канал STDOUT / STDIN с двумя процессами и потоком веб-вывода в C # - PullRequest
0 голосов
/ 05 марта 2010

У меня есть два процесса, которые я хотел бы передать вместе с C #, а затем отправить вывод второго непосредственно в поток вывода HTTP.

В командной строке я могу сделать это, и она отлично работает (где "-" представляет стандартный ввод / вывод):

proc1 "file_to_input" - | proc2 - -

Моя проблема заключается в соединении этих двух процессов в C # и возможности взять STDOUT в proc2 и перенести его непосредственно в Интернет, без предварительной буферизации всего объекта. Входы и выходы будут иметь двоичный тип данных, поэтому мне нужно преобразовать его из стандартного StreamReader / Writer.

Возможно ли это, и как лучше всего это сделать? Спасибо!

1 Ответ

0 голосов
/ 05 марта 2010

Если я не понимаю вас, это нормальная ситуация «чтение из одного потока, запись в другой», когда вы объявляете буфер некоторого размера и просто продолжаете чтение с ввода и запись на выход, пока ничего не останется читать с ввода.

В .NET 4.0 они добавили метод CopyTo в Stream, чтобы сделать это проще, но вы можете просто сделать тот же код самостоятельно.

Stream source = ...;
Stream destination = ...;
byte[] buffer = new byte[4096];
int read;
while ((read = source.Read(buffer, 0, buffer.Length)) != 0) {
    destination.Write(buffer, 0, read);
}

В вашем случае звучит так, как будто вы можете получить исходный код через Console.OpenStandardInput - для получателя я не уверен на 100%, что вы подразумеваете под «переносить его непосредственно в Интернет», но поскольку мы являемся консольным приложением а не страница asp.net, я предполагаю, что вы отправляете ее на страницу назначения. Если вы используете WebClient, вы можете использовать его метод OpenWrite. Если бы это была страница asp.net, считывающая это из отдельного процесса, она могла бы записать ее в Response.OutputStream.

Ссылки по теме:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...