Когда использовать именованные каналы в Windows?

В *nix многие приложения командной строки, которые принимают имена файлов в качестве аргументов, также принимают каналы. Пример:

anApplication file.txt

Также работает с

anApplication | anotherApplication arguments

И результат «другого приложения» перенаправляется на «приложение», поскольку это был файл

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


person Jader Dias    schedule 11.07.2009    source источник


Ответы (4)


У вас это совсем наоборот. Просто чтобы быть точным:

anApplication file.txt

Это запускает anApplication с именем файла file.txt в качестве первого аргумента командной строки.

anApplication | anotherApplication arguments

Это запускает anApplication без аргументов командной строки. Стандартный выход связан со стандартным входом anotherApplication, который запускается с arguments в качестве аргументов командной строки. Это точно так же в Windows, как и в версиях Unix. Именованные каналы — это совершенно другая функция ОС.

Именованный канал — это запись каталога, которая выглядит как файл, но действует как поток данных, к которому вы можете присоединять вывод и ввод.

person 1800 INFORMATION    schedule 11.07.2009

именованный канал в Windows — это совсем другое. чем то, о чем вы говорите. Именованный канал на самом деле является инструментом, помогающим создавать серверные приложения в Windows, и примерно эквивалентен «сокету домена Unix».

В вашей ситуации, работает ли anApplication в этой ситуации, зависит от того, как приложение реагирует на выполнение без имени файла в командной строке. (Я говорю о расположении в вашем описании; командная строка задом наперед, как указано в другом ответе.) Если приложение читает из stdin при запуске без командной строки, то такое расположение каналов оболочки будет работать. Если вместо этого приложение печатает справочное сообщение и завершает работу при запуске без имени файла, то этот канал оболочки не будет работать.

person Greg Hewgill    schedule 11.07.2009

Обратите внимание, что это синтаксис cmd.exe.

Такой вид перенаправления канала должен работать с любой программой, поэтому, чтобы ответить на ваш конкретный вопрос, программе не требуется специальный код, если это стандартное консольное приложение.

Есть одно предостережение: если программа получает ввод через специальные формы мониторинга клавиатуры API среды выполнения, перенаправление не будет работать.

person polyglot    schedule 11.07.2009

Насколько я знаю, он работает так же под Windows, как и в UNIX. Я предполагаю, что некоторые более продвинутые функции Win32 Console API могут обойти это, но для этого вам придется прочитать документацию.

person Vilx-    schedule 11.07.2009